Propagação automática de tags com tags definidas pelo usuário

A propagação de tags atribui automaticamente uma tag de objeto aos objetos de destino se ela for aplicada ao objeto de origem. Por exemplo, você pode definir tags em um objeto de origem, como uma tabela e suas colunas, e essas tags são automaticamente propagadas para um objeto de destino, como uma exibição ou outra tabela criada a partir do objeto de origem.

As vantagens da propagação automática de tags incluem o seguinte:

  • Simplificação do gerenciamento de tags entre objetos, especialmente quando as tags são aplicadas a objetos ou colunas de origem para facilitar a descoberta e proteção de dados.

  • Garantia de que todas as políticas associadas às tags sejam aplicadas automaticamente aos objetos de destino.

Somente o proprietário da tag com o privilégio APPLY TAG em nível de conta pode implementar a propagação de tag automática.

Tipos de propagação

Você pode optar por propagar uma tag quando houver uma dependência de objeto, uma movimentação de dados ou ambas.

Propagação de tags para dependências de objeto

Quando a propagação de tags é configurada para dependências de objeto, uma tag é propagada de um objeto de origem para todos os objetos de destino baseados nela. Por exemplo, se você configurar a propagação de uma tag data_sensitivity em uma tabela t1 e, em seguida, criar duas exibições com base em t1, a tag data_sensitivity será propagada para ambas as exibições.

A criação de uma exibição, exibição segura, exibição materializada ou tabela dinâmica a partir de um objeto de origem é considerada uma dependência de objeto.

Propagação contínua para dependências de objeto

Quando uma tag é configurada para dependências de objeto, o Snowflake atualiza continuamente os objetos de destino quando ocorre qualquer uma das seguintes situações:

  • A tag é adicionada a um objeto ou coluna de origem.

  • O valor de uma tag é atualizado.

  • Uma tag é removida de um objeto ou coluna de origem. Nesse caso, o Snowflake remove a tag do objeto ou da coluna de destino.

Por exemplo, suponha que a tag data_sensitivity tenha sido propagada da tabela t1 para a exibição v2 após a execução de uma instrução CREATE VIEW. Quando você altera o valor de data_sensitivity em t1, o valor da tag em v2 também é atualizado.

A propagação automática de tags depende da existência do objeto de origem. Se o objeto de origem com tags for descartado, as tags não serão propagadas para o objeto de destino. Como uma exibição depende de suas fontes, como uma tabela base ou outras exibições, as tags são propagadas somente se o objeto de origem existir.

Propagação de tags para movimentação de dados

Quando a propagação de tags é configurada para a movimentação de dados, uma tag é propagada quando você move dados de um objeto de origem para outro objeto por meio de um dos seguintes procedimentos:

  • Executando uma instrução CREATE TABLE … AS SELECT (CTAS) para criar uma tabela.

  • Execução de uma instrução CREATE DYNAMIC TABLE.

  • Execução de um comando de linguagem de manipulação de dados (DML). A propagação de tags ocorre para os seguintes comandos de DML:

    • INSERT

    • MERGE

    • UPDATE

    • COPY INTO

CREATE TABLE … CLONE e CREATE TABLE … LIKE não dependem da propriedade de tag PROPAGATE para propagação de tag. Quando você executa essas instruções, as tags da origem são sempre atribuídas ao objeto de destino.

Nota

Diferentemente da propagação de tags para dependências de objetos, as tags aplicadas aos objetos de destino quando há movimentação de dados não são continuamente atualizadas à medida que as tags são alteradas no objeto de origem.

Configuração da propagação de tags

Para ativar a propagação automática de tags, use o comando CREATE TAG ou ALTER TAG para definir a propriedade PROPAGATE. Você pode configurar a propriedade para que as tags sejam propagadas para dependências de objetos, movimentação de dados ou ambos.

Para obter instruções sobre como configurar a propagação de tags, consulte Defina uma tag que se propagará automaticamente.

Conflitos de propagação de tags

Podem ocorrer conflitos quando uma tag é propagada de diferentes objetos de origem para o mesmo objeto de destino. Se a tag tiver um valor diferente em cada um dos objetos de origem, haverá um conflito quando essa tag for propagada dos objetos de origem para o objeto de destino.

Nota

Se o objeto de destino tiver uma tag que tenha sido aplicada manualmente, o valor da tag existente terá precedência sobre um valor propagado para que não haja conflito.

Se o objeto de destino herdar um valor de objeto superior na hierarquia de objetos Snowflake, o valor propagado terá precedência e não haverá conflito.

A propriedade ON_CONFLICT de uma tag determina o que acontece quando há um conflito. Você tem três opções para lidar com conflitos de propagação de tags:

  • Substitua o valor da tag pela cadeia de caracteres CONFLICT. Esse é o padrão se você não definir o parâmetro ON_CONFLICT da tag.

  • Substitua o valor da tag por uma cadeia de caracteres definida pelo usuário. Você define o parâmetro ON_CONFLICT como essa cadeia de caracteres.

    Por exemplo, se você quiser que o valor de uma tag seja HIGHLY CONFIDENTIAL quando houver um conflito de valores, use o seguinte SQL para criar a tag:

    CREATE TAG data_sensitivity
      PROPAGATE = ON_DEPENDENCY_AND_DATA_MOVEMENT
      ON_CONFLICT = 'HIGHLY CONFIDENTIAL';
    
    Copy
  • Use a ordem dos valores no parâmetro ALLOWED_VALUES da tag para determinar o valor a ser usado. Defina ON_CONFLICT = ALLOWED_VALUES_SEQUENCE para implementar essa estratégia.

    Por exemplo, suponha que você tenha criado a tag com a seguinte instrução SQL:

    CREATE TAG data_sensitivity
      ALLOWED_VALUES 'confidential', 'internal', 'public'
      PROPAGATE = ON_DEPENDENCY
      ON_CONFLICT = ALLOWED_VALUES_SEQUENCE;
    
    Copy

    Se houver um conflito para essa tag entre os valores internal e public, o valor da tag data_sensitivity será internal, pois ela vem antes de public na lista de valores permitidos.

    Esteja ciente de que, se você optar por usar ON_CONFLICT = ALLOWED_VALUES_SEQUENCE, a alteração do parâmetro ALLOWED_VALUES afetará a forma como os conflitos são resolvidos. Por exemplo, se você alterar a ordem dos valores na lista permitida, conflitos futuros poderão resultar na atribuição de um valor diferente à tag.

Identifique conflitos não resolvidos

Se um valor de tag for substituído por uma cadeia de caracteres definida pelo usuário ou pela cadeia de caracteres padrão CONFLICT quando houver um conflito de propagação de tag, você poderá consultar a função de tabela TAG_REFERENCES para identificar os conflitos.

Por exemplo, se você aceitar o padrão de substituir o valor da tag pela cadeia de caracteres CONFLICT, poderá usar a seguinte consulta para determinar se houve algum conflito:

SELECT tag_name, tag_value, apply_method, level, domain
  FROM table(my_db.INFORMATION_SCHEMA.TAG_REFERENCES('my_table', 'table'))
  WHERE tag_name = '<tag_name>' AND tag_value = 'CONFLICT';
Copy

Objetos com suporte

A propagação de tags da origem para o destino é compatível com os seguintes tipos de objetos:

  • Colunas

  • Os seguintes tipos de tabelas:

    • Tabelas

    • Tabelas dinâmicas – A criação de uma tabela dinâmica é considerada tanto uma dependência de objeto quanto uma movimentação de dados para fins de propagação de tags.

    • Tabelas externas

    • Tabelas Iceberg

    • Tabelas temporárias/transitórias

  • Os seguintes tipos de exibições:

    • Exibições

    • Exibições seguras

    • Exibições materializadas

Limitações e considerações

  • As tags do sistema não são propagadas.

  • As tags herdadas não são propagadas.

  • As tags não são propagadas de um compartilhamento para objetos locais.

  • O número de tags em um objeto não pode exceder o limite padrão.

  • A propagação de tags não funciona se houver mais de 10 mil exibições que dependam de uma tabela de origem.

  • Com a propagação de tags para dependências de objetos, uma tag pode ser aplicada tanto à tabela de origem quanto às exibições de destino. Se a tag estiver associada a uma política de mascaramento, poderá haver consequências associadas à execução duplicada da política.