Trabalhar com tags de objeto

Este tópico descreve como criar uma tag e atribuí-la a um objeto Snowflake. Ele também contém instruções sobre como excluir uma tag.

Crie uma tag

Use o comando CREATE TAG para criar uma nova tag. Por exemplo, para criar uma tag básica chamada cost_center sem nenhum parâmetro opcional, execute o seguinte:

CREATE TAG cost_center;
Copy

Defina uma lista de valores de tag permitidos

O parâmetro de tag ALLOWED_VALUES permite que você especifique uma lista dos valores de cadeia de caracteres que podem ser atribuídos à tag quando ela é definida em um objeto. Os usuários não podem atribuir um valor a uma tag, a menos que o valor esteja na lista definida.

O número máximo de valores de cadeia de caracteres possíveis para uma única tag é 300. O valor da cadeia de caracteres para cada tag pode ter até 256 caracteres.

Você pode especificar a lista de valores permitidos ao criar ou substituir uma tag com uma instrução CREATE TAG ou ao modificar uma tag existente com uma instrução ALTER TAG. Observe que a instrução ALTER TAG suporta a adição de valores permitidos para uma tag e o descarte dos valores existentes para uma tag.

Nota

Se uma tag estiver configurada para se propagar automaticamente para objetos de destino, a ordem dos valores na lista permitida pode afetar a forma como os conflitos são resolvidos. Para obter mais informações, consulte Conflitos de propagação de tags.

Para determinar a lista de valores permitidos para uma tag, chame a função SYSTEM$GET_TAG_ALLOWED_VALUES.

Exemplos

Crie uma tag chamada cost_center com finance e engineering como os dois únicos valores de cadeia de caracteres permitidos:

CREATE TAG cost_center
  ALLOWED_VALUES 'finance', 'engineering';
Copy

Verifique os valores permitidos:

SELECT SYSTEM$GET_TAG_ALLOWED_VALUES('governance.tags.cost_center');
Copy

Modifique a tag chamada cost_center para adicionar marketing como um valor de cadeia de caracteres permitido:

ALTER TAG cost_center
  ADD ALLOWED_VALUES 'marketing';
Copy

Modifique a tag chamada cost_center para descartar engineering como um valor de cadeia de caracteres permitido:

ALTER TAG cost_center
  DROP ALLOWED_VALUES 'engineering';
Copy

Defina uma tag que se propagará automaticamente

O parâmetro de tag PROPAGATE permite que você configure uma tag para que ela seja propagada automaticamente de um objeto de origem para objetos de destino em determinadas circunstâncias. Esse parâmetro PROPAGATE pode ser definido com os seguintes valores:

  • PROPAGATE = ON_DEPENDENCY: a tag é propagada para um objeto de destino quando há uma dependência de objeto.

  • PROPAGATE = ON_DATA_MOVEMENT: a tag é propagada para um objeto de destino quando os dados se movem do objeto de origem para o objeto de destino.

  • PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT: a tag é propagada tanto para dependências de objeto quanto para movimentação de dados.

Para obter mais informações sobre propagação, consulte Propagação automática de tags com tags definidas pelo usuário.

Exemplos

Crie uma nova tag que se propaga automaticamente quando há uma dependência de objeto.

CREATE TAG data_sensitivity PROPAGATE = ON_DEPENDENCY;
Copy

Atualize uma tag existente para habilitar a propagação automática para dependência de objetos e movimentação de dados.

ALTER TAG data_sensitivity SET PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT;
Copy

Atualize uma tag existente para desativar a propagação.

ALTER TAG data_sensitivity UNSET PROPAGATE;
Copy

Defina uma tag

Você pode definir uma tag em um objeto usando a interface de usuário ou SQL.

Ao definir uma tag em um objeto, você deve definir o valor da tag. Esse valor de cadeia de caracteres pode ter até 256 caracteres.

O usuário que criou uma tag pode ter especificado uma lista de valores permitidos e, nesse caso, você só pode definir um valor de tag que esteja na lista. Para obter a lista de valores de cadeia de caracteres permitidos para uma determinada tag, chame a função SYSTEM$GET_TAG_ALLOWED_VALUES. Por exemplo, supondo que a tag cost_center esteja armazenada em um banco de dados chamado governance e em um esquema chamado tags, você pode executar o seguinte para determinar se pode definir o valor da tag como finance ou marketing:

SELECT SYSTEM$GET_TAG_ALLOWED_VALUES('governance.tags.cost_center');
Copy
+--------------------------------------------------------------+
| SYSTEM$GET_TAG_ALLOWED_VALUES('GOVERNANCE.TAGS.COST_CENTER') |
|--------------------------------------------------------------|
| ["finance","marketing"]                                      |
+--------------------------------------------------------------+

Use o Snowsight para definir tags

Você pode definir uma tag em tabelas, exibições e colunas existentes usando Snowsight.

Há várias opções para definir uma tag:

  • Navegue até a tabela, exibição ou coluna desejada usando o explorador de objetos (ou seja, Data » Databases).

    Selecione o menu More (ou seja, ...) » Edit, e selecione + Tag. Siga as instruções para gerenciar a atribuição de tags.

  • Navegue até a área de governança (ou seja, Monitoring » Governance) no Snowsight e faça o seguinte:

    • Selecione um bloco, uma porcentagem de distribuição e uma das tags ou tabelas mais usadas. Quando você seleciona um item em Dashboard, a Snowsight redirecionará você para a guia Tagged Objects.

    • Modifique os filtros conforme necessário. Quando você seleciona um objeto ou coluna, Snowsight redirecionará você para o respectivo local no explorador de objetos. Atualize a atribuição de tags conforme necessário.

  • Navegue até a guia Tagged Objects diretamente. Modifique os filtros, selecione um objeto ou coluna e gerencie a atribuição de tags.

Nota

Para acessar a área Governance, sua conta Snowflake deve ser Enterprise Edition ou superior. Além disso, você deve ter uma das seguintes funções:

  • Use a função ACCOUNTADMIN.

  • Use uma função que tenha recebido as funções de banco de dados GOVERNANCE_VIEWER e OBJECT_VIEWER.

    Para obter informações sobre essas funções de banco de dados, consulte Funções de banco de dados SNOWFLAKE.

Use SQL para definir tags

Você pode usar os comandos SQL para definir uma tag ao criar um novo objeto ou para definir uma tag em um objeto existente.

Para definir uma tag em um novo objeto que está sendo criado, use o comando CREATE … WITH TAG. Por exemplo, para atribuir uma tag cost_center a um warehouse que você está criando, execute o seguinte:

CREATE WAREHOUSE mywarehouse WITH TAG (cost_center = 'sales');
Copy

Para definir uma tag em um objeto existente, use o comando ALTER … SET TAG. Por exemplo, para atribuir uma tag cost_center a um warehouse existente, execute o seguinte:

ALTER WAREHOUSE wh1 SET TAG cost_center = 'sales';
Copy

Exemplo ampliado: crie e atribua tags com SQL

A seguir, um exemplo estendido que oferece uma visão geral de alto nível sobre como usar SQL para implementar a marcação de objetos. Ele mostra como fazer o seguinte:

  • Gerencie os privilégios de controle de acesso necessários para trabalhar com tags.

    Para simplificar, o fluxo de trabalho considera uma abordagem de gerenciamento centralizado das tags, onde a função personalizada tag_admin tem tanto o privilégio global CREATETAG como APPLYTAG. Para obter abordagens alternativas, consulte Abordagens de atribuição de privilégios de marcação.

  • Crie uma tag usando uma instrução CREATE TAG.

  • Atribua uma tag a um novo objeto Snowflake usando o comando CREATE <objeto>.

  • Atribua uma tag a objetos Snowflake existentes usando os comandos ALTER <objeto>.

  1. Crie uma função personalizada e atribua privilégios.

    Em uma abordagem de gerenciamento centralizado, a função personalizada tag_admin é responsável por criar e aplicar tags a objetos Snowflake.

    Observe que este exemplo utiliza a função de sistema ACCOUNTADMIN. Se não for desejável utilizar esta função de maior privilégio em um ambiente de produção, verifique se a função que atribui privilégios à função personalizada tag_admin tem os privilégios necessários para qualificar a função personalizada tag_admin. Para obter mais informações, consulte Privilégios de controle de acesso (neste tópico).

    USE ROLE USERADMIN;
    CREATE ROLE tag_admin;
    USE ROLE ACCOUNTADMIN;
    GRANT CREATE TAG ON SCHEMA mydb.mysch TO ROLE tag_admin;
    GRANT APPLY TAG ON ACCOUNT TO ROLE tag_admin;
    
    Copy
  2. Conceda a função personalizada tag_admin a um usuário que atue como administrador de tags.

    USE ROLE USERADMIN;
    GRANT ROLE tag_admin TO USER jsmith;
    
    Copy
  3. Execute uma instrução CREATE TAG para criar uma tag.

    USE ROLE tag_admin;
    USE SCHEMA mydb.mysch;
    CREATE TAG cost_center;
    
    Copy
  4. Atribuir a tag a um novo warehouse.

    USE ROLE tag_admin;
    CREATE WAREHOUSE mywarehouse WITH TAG (cost_center = 'sales');
    
    Copy
  5. Atribuir a tag a um warehouse existente.

    USE ROLE tag_admin;
    ALTER WAREHOUSE wh1 SET TAG cost_center = 'sales';
    
    Copy
  6. Atribuir a tag a coluna de uma tabela existente.

    ALTER TABLE hr.tables.empl_info
      MODIFY COLUMN job_title
      SET TAG cost_center = 'marketing';
    
    Copy

Exclua uma tag

Use o comando DROP TAG para excluir uma tag. Quando você executa o comando, há um período de tolerância de 24 horas antes que a tag seja permanentemente excluída. Durante o período de cortesia, você pode executar o comando UNDROP TAG para restaurar a tag, que também restaura todas as atribuições de tag (ou seja, referências) entre a tag e os objetos.

Se você quiser determinar quais objetos têm uma tag antes de excluí-la, consulte a exibição TAG_REFERENCES (em Account Usage) para determinar as atribuições de tag.

Privilégios de controle de acesso

Privilégios de tags

O Snowflake permite os seguintes privilégios para determinar se os usuários podem criar, definir e possuir tags.

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

Privilégio

Uso

CREATE

Permite criar uma nova tag em um esquema.

APPLY

Permite operações de definição e remoção para a tag em um objeto Snowflake. Para exemplos de sintaxe, consulte: Resumo de comandos DDL, operações e privilégios.

OWNERSHIP

Transfere a propriedade da tag, o que garante o controle total sobre a tag. Necessário para alterar a maioria das propriedades de uma tag.

Resumo de comandos DDL, operações e privilégios

A tabela a seguir resume a relação entre privilégios de tags e operações DDL.

Operação

Privilégio necessário

Criar tag.

Uma função com o privilégio CREATE TAG no mesmo esquema.

Crie uma tag que se propaga

Uma função com os privilégios APPLY TAG ON ACCOUNT e OWNERSHIP na tag.

Alterar tag.

A função com o privilégio OWNERSHIP na tag.

Descartar e cancelar o descarte da tag.

Uma função com o privilégio OWNERSHIP na tag e o privilégio USAGE no banco de dados e no esquema em que está a tag.

Mostrar tags.

Uma das seguintes opções: . Uma função com o privilégio USAGE no esquema em que as tags existem, ou . Uma função com o privilégio APPLY TAG ON ACCOUNT.

Definir ou remover uma tag de um objeto.

Para objetos individuais, uma função com o privilégio APPLY TAG ON ACCOUNT, ou o privilégio APPLY TAG na tag e o privilégio OWNERSHIP no objeto no qual a tag está definida. Consulte Objetos com suporte.

Definir ou remover uma tag de uma coluna.

Uma função com o privilégio APPLY TAG ON ACCOUNT, ou, uma função com o privilégio APPLY na tag e o privilégio OWNERSHIP na tabela ou exibição.

Colocar tags em um objeto.

Consulte SYSTEM$GET_TAG, TAG_REFERENCES e TAG_REFERENCES_WITH_LINEAGE.

Abordagens de atribuição de privilégios de marcação

Esta seção descreve diferentes abordagens para atribuir os privilégios necessários para criar e definir tags.

  1. Para uma abordagem centralizada de gerenciamento de tags na qual a função personalizada tag_admin cria e define tags em todos os objetos/colunas, são necessários os seguintes privilégios:

    USE ROLE securityadmin;
    GRANT CREATE TAG ON SCHEMA <db_name.schema_name> TO ROLE tag_admin;
    GRANT APPLY TAG ON ACCOUNT TO ROLE tag_admin;
    
    Copy
  2. Em uma abordagem híbrida de gerenciamento, uma única função tem o privilégio CREATE TAG para assegurar que as tags sejam nomeadas de forma consistente e que equipes ou funções individuais tenham o privilégio APPLY para uma tag específica.

    Por exemplo, a função personalizada finance_role pode receber o privilégio de definir a tag cost_center nas tabelas e exibições que a função possui (ou seja, a função tem o privilégio OWNERSHIP na tabela ou exibição):

    USE ROLE securityadmin;
    GRANT CREATE TAG ON SCHEMA <db_name.schema_name> TO ROLE tag_admin;
    GRANT APPLY ON TAG cost_center TO ROLE finance_role;
    
    Copy