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:

  • Opção 1: substitua o valor da tag pela cadeia de caracteres CONFLICT. Esse será o padrão se você não definir o parâmetro ON_CONFLICT da tag.

  • Opção 2: 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
  • Opção 3: use a ordem dos valores no parâmetro ALLOWED_VALUES da tag para determinar qual valor usar. 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.

Para rastrear conflitos associados à propagação de tag, consulte Uso de tabela de eventos para monitorar a propagação de tag.

Uso de tabela de eventos para monitorar a propagação de tag

Você pode usar uma tabela de eventos para coletar dados de telemetria relacionados à propagação de tag. Depois que o Snowflake começar a coletar os dados na tabela de eventos, você poderá consultar a tabela, criar um fluxo para rastrear alterações ou definir alertas para enviar notificações quando determinados eventos ocorrerem.

Se quiser coletar dados de telemetria para propagação de tag, será necessário habilitar o parâmetro de conta ENABLE_TAG_PROPAGATION_EVENT_LOGGING. Para começar a coletar dados, execute o seguinte comando:

ALTER ACCOUNT SET ENABLE_TAG_PROPAGATION_EVENT_LOGGING = TRUE;
Copy

Se você tiver uma tabela de eventos definida para o banco de dados da tag, os eventos serão registrados nessa tabela. Caso contrário, os eventos serão registrados na tabela de eventos padrão.

Explicação dos eventos

A tabela a seguir descreve os valores na tabela de eventos que correspondem à propagação de tag para que você possa se concentrar nos eventos apropriados. Para obter informações detalhadas sobre a estrutura de uma tabela de eventos, consulte Colunas da tabela de eventos.

Colunas da tabela de eventos

Campo da coluna

Valor do campo

Descrição

scope

name

snow.automatic_tag_propagation

Indica que o registro está relacionado à propagação automática de tag.

record_attributes

tag_name

tag_name

Nome da tag que teve um evento durante a propagação.

record_attributes

event_type

CONFLICT

Indica que ocorreu um conflito ao propagar uma tag.

record_attributes

event_type

TAG_PROPAGATION_LIMIT_EXCEEDED

Indica que o Snowflake não propagou uma tag porque havia mais de 10.000 objetos de destino.

value

conflict_values

[tag_value, tag_value]

Matriz dos valores de tag em conflito.

value

resolution_type

DEFAULT, STRING_OVERRIDE ou ALLOWED_VALUES_OVERRIDE

Indica a ação que Snowflake executou quando ocorreu um conflito. Para entender por que o conflito foi resolvido de uma determinada forma, consulte Conflitos de propagação de tags.

value

resolved_values

tag_value

Valor final da tag depois que o Snowflake resolveu um conflito.

Use os exemplos a seguir para entender melhor como identificar eventos de propagação de tag em uma tabela de eventos.

Consulta: encontrar todos os eventos relacionados à propagação da tag TAG1
SELECT
  TIMESTAMP as time,
  RECORD_ATTRIBUTES['event_type'] as event_type,
  VALUE as event_details
FROM tagging_db.tagging_schema.my_event_table
WHERE
  SCOPE['name'] = 'snow.automatic_tag_propagation'
  AND RECORD_ATTRIBUTES['tag_name'] = 'TAGGING_DB.TAGGING_SCHEMA.TAG1';
Copy
Consulta: encontrar todas as tags que tiveram conflito quando propagadas
SELECT
  DISTINCT RECORD_ATTRIBUTES['tag_name'] as tags,
  VALUE['conflict_values'] as conflicting_tag_values,
  VALUE['resolution_type'] as resolution_type,
  VALUE['resolved_value'] as resolved_value,
FROM tagging_db.tagging_schema.my_event_table
WHERE
  SCOPE['name'] = 'snow.automatic_tag_propagation'
  AND RECORD_ATTRIBUTES['event_type'] = 'CONFLICT';
Copy
Consulta: encontrar entidades que tiveram conflitos quando a tag TAG1 foi propagada
SELECT
  TIMESTAMP as time,
  RECORD_ATTRIBUTES['entity_name'] as entity_name,
  RECORD_ATTRIBUTES['entity_domain'] as entity_domain,
FROM tagging_db.tagging_schema.my_event_table
WHERE
  SCOPE['name'] = 'snow.automatic_tag_propagation'
  AND RECORD_ATTRIBUTES['tag_name'] = 'TAGGING_DB.TAGGING_SCHEMA.TAG1'
  AND RECORD_ATTRIBUTES['event_type'] = 'CONFLICT';
Copy

Gravidade dos eventos

Os eventos de propagação de tag são registrados somente se o parâmetro LOG_LEVEL que controla a tabela foi configurado para mostrar eventos desse nível de gravidade. Use a tabela a seguir para determinar o nível de gravidade dos eventos de propagação de tag.

Tipo de evento

Tipo de resolução

Gravidade

CONFLICT

default

WARN

string_override

INFO

allowed_values_override

INFO

TAG_PROPAGATION_LIMIT_EXCEEDED

n/a

ERROR

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.

  • Uma tag não pode ser propagada para mais de 10.000 objetos de destino. Você pode usar a tabela de eventos para descobrir se a propagação falhou por esse motivo.

  • 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.