CREATE JOIN POLICY

Cria uma nova política de junção no esquema atual/especificado ou substitui uma política de junção existente.

Após criar uma política de junção, atribua a política a uma tabela usando um comando ALTER TABLE ou a uma exibição usando um comando ALTER VIEW. Como alternativa, é possível atribuir uma política de junção a uma tabela ao criá-la.

Consulte também:

Referência de DDL da política de junção

Sintaxe

CREATE [ OR REPLACE ] JOIN POLICY [ IF NOT EXISTS ] <name>
  AS () RETURNS JOIN_CONSTRAINT -> <body>
  [ COMMENT = '<string_literal>' ]
Copy

Parâmetros

name

Identificador da política de junção; deve ser exclusivo para seu esquema.

Além disso, o identificador deve começar com um caractere alfabético e não pode conter espaços ou caracteres especiais, a menos que toda a cadeia de caracteres do identificador esteja entre aspas duplas (por exemplo, "My object"). Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas.

Para obter mais informações, consulte Requisitos para identificadores.

AS () RETURNS JOIN_CONSTRAINT

Assinatura e tipo de devolução da política. A assinatura não aceita argumentos e o tipo de retorno é JOIN_CONSTRAINT, que é um tipo de dados interno. Todas as políticas de junção têm a mesma assinatura e o mesmo tipo de retorno.

body

Expressão SQL que determina as restrições de uma política de junção.

Para definir o corpo da política de junção, chame a função JOIN_CONSTRAINT, que retorna TRUE ou FALSE. Quando a função retorna TRUE, as consultas precisam usar uma junção para retornar os resultados.

A sintaxe da função JOIN_CONSTRAINT é:

JOIN_CONSTRAINT (
  { JOIN_REQUIRED => <boolean_expression> }
  )
Copy

Onde:

JOIN_REQUIRED => boolean_expression

Especifica se uma junção é necessária em consultas quando os dados são selecionados de tabelas ou exibições que têm a política de junção atribuída a elas.

O corpo de uma política não pode fazer referência a funções, tabelas ou exibições definidas pelo usuário.

As colunas de junção permitidas são especificadas na instrução CREATE ou ALTER para a tabela ou exibição à qual a política é aplicada, e não na instrução CREATE JOIN POLICY.

COMMENT = 'string_literal'

Adiciona um comentário ou substitui um comentário existente para a política de junção.

Requisitos de controle de acesso

A função usada para executar essa operação deve ter, no mínimo, os seguintes privilégios:

Privilégio

Objeto

Notas

CREATE JOIN POLICY

Esquema

O privilégio USAGE no banco de dados e no esquema pai é necessário para executar operações em qualquer objeto de um esquema.

Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.

Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.

Para obter mais informações sobre a DDL da política de junção e os privilégios, consulte Gerenciamento das políticas de junção.

Notas de uso

  • Se quiser atualizar uma política de junção existente e precisar ver o corpo atual da política, execute o comando DESCRIBE JOIN POLICY ou a função GET_DDL.

  • Em relação aos metadados:

    Atenção

    Os clientes devem garantir que nenhum dado pessoal (exceto para um objeto do usuário), dados sensíveis, dados controlados por exportação ou outros dados regulamentados sejam inseridos como metadados ao usar o serviço Snowflake. Para obter mais informações, consulte Campos de metadados no Snowflake.

Exemplos

Crie uma política de junção que exija que as consultas incluam uma junção (quando a política for aplicada a tabelas e exibições que aparecem nessas consultas):

CREATE JOIN POLICY jp1 AS ()
  RETURNS JOIN_CONSTRAINT -> JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE);
Copy

Crie uma política de junção que permita que um usuário com a função ACCOUNTADMIN execute consultas sem junções; outros usuários devem executar consultas de junção:

CREATE JOIN POLICY jp2 AS ()
  RETURNS JOIN_CONSTRAINT ->
    CASE
      WHEN CURRENT_ROLE() = 'ACCOUNTADMIN'
        THEN JOIN_CONSTRAINT(JOIN_REQUIRED => FALSE)
      ELSE JOIN_CONSTRAINT(JOIN_REQUIRED => TRUE)
    END;
Copy
OSZAR »