Linhagem de dados

O Snowflake rastreia como os dados fluem de objetos de origem para objetos de destino, por exemplo, de uma tabela para uma exibição, e permite que você veja de onde os dados de um objeto vieram ou para onde vão. Essas informações são chamadas de linhagem de dados e ajudam você a entender as relações entre os objetos Snowflake.

A linhagem de dados captura dois tipos de relacionamento:

  • Movimentação de dados, como quando os dados são copiados ou materializados de um objeto para outro. Por exemplo, as operações CREATE TABLE AS SELECT (CTAS), INSERT, ou MERGE em tabelas resultam na movimentação de dados.

  • Dependências de objetos, quando um objeto faz referência a um objeto base, mas não materializa nem copia dados, como quando uma exibição faz referência a uma tabela.

A linhagem de dados Snowflake oferece esses benefícios:

  • Fornece análise de impacto ao compreender a relação entre diferentes objetos.

  • Aprimora o monitoramento e a solução de problemas com a exibição da linhagem de movimentação de dados e das dependências de objetos.

  • Facilita a conformidade ao rastrear o fluxo de dados confidenciais.

  • Ajuda você a trabalhar com tags e políticas de mascaramento em colunas para proteger dados confidenciais.

  • Aumenta a confiança nos dados ao compreender os objetos e colunas de origem e destino.

  • Permite que a administração da linhagem de exibição seja delegada. Para obter mais informações, consulte Controle de acesso às informações de linhagem.

Sobre os relacionamentos upstream e downstream

A linhagem de dados ajuda você a entender os relacionamentos de um objeto em termos de objetos de origem e de destino. Na terminologia de linhagem, o objeto de origem está “upstream” (acima) do objeto de destino, e o objeto de destino está “downstream” (abaixo) do objeto de origem. Snowsight revela os objetos de forma incremental, um passo de cada vez upstream ou downstream da sua seleção.

Por exemplo, nesta instrução SQL:

CREATE TABLE table2 AS SELECT col1 FROM table1;
Copy

table2 é a tabela de destino e está a jusante da tabela de origem, table1. A coluna col1, originada na tabela table1, está inclusa na tabela table2; essa também é uma relação de linhagem downstream.

Se você visualizar os detalhes da tabela table1 no Snowsight, a guia Lineage exibirá uma seta apontando de table1 para table2 para indicar a relação de linhagem downstream. Se, em vez disso, você começar na tabela table2, uma seta aponta de table2 para table1.

Introdução

Para começar a usar a linhagem de dados na Snowsight, faça o seguinte:

  1. Faça login na Snowsight com os privilégios necessários.

  2. Use o menu Data » Databases para selecionar um objeto compatível, como uma tabela ou visualização.

  3. Selecione a guia Lineage.

As ações básicas na guia Lineage incluem o seguinte:

Exemplo de captura de tela da linhagem de dados no Snowsight
  • A. Selecione um objeto para mostrar detalhes adicionais sobre ele, incluindo colunas e tags nessas colunas.

  • B. Selecione +/- para mostrar ou ocultar objetos que estão mais upstream ou downstream.

  • C. Selecione a seta que conecta dois objetos para mostrar informações sobre como o objeto downstream foi criado (por exemplo, a instrução SQL que criou um objeto). Seus privilégios de controle de acesso determinam quais informações são exibidas.

  • D. Abre um novo diagrama de linhagem que se concentra na linhagem do objeto selecionado.

Para saber mais sobre como usar a guia Lineage para executar outras ações, consulte o seguinte:

Linhagem de colunas

Você pode usar a Snowsight para rastrear o relacionamento entre as colunas em um objeto de origem e as colunas em um objeto de destino. Para uma coluna específica, você pode determinar todas as colunas upstream e downstream que compartilham a linhagem com a coluna.

Para determinar a linhagem de uma coluna:

  1. Abra a guia Linhagem e selecione o objeto que contém a coluna que você deseja rastrear. Um painel lateral é aberto.

  2. Passe o mouse sobre o nome da coluna no painel lateral e selecione View Lineage.

  3. Selecione Upstream Lineage ou Downstream Lineage para listar as colunas em objetos upstream ou downstream.

    Você pode usar a coluna Distance para determinar a distância de uma coluna na linhagem. Por exemplo, se a distância downstream for 1, então a coluna está em um objeto que foi criado diretamente a partir do objeto atual. Se a distância downstream for 2, então a coluna existe em um objeto que foi criado a partir de um objeto que foi criado a partir do objeto atual.

Trabalhar com tags

A guia Lineage oferece uma experiência de governança integrada que permite que você visualize a linhagem das colunas, identifique as colunas que devem ter tags e aplique novas tags, tudo no mesmo fluxo de trabalho.

A possibilidade de ver e aplicar tags depende dos privilégios de controle de acesso da função que você está usando para visualizar a guia Lineage. Para obter informações sobre os privilégios necessários para trabalhar com tags, consulte Resumo de comandos DDL, operações e privilégios.

Localizar tags em um objeto e suas colunas

  1. Abra a guia Linhagem e selecione o objeto desejado. Um painel lateral é aberto.

  2. Para visualizar as tags no próprio objeto, procure na seção Details do painel lateral.

  3. Para visualizar as tags em uma coluna do objeto, localize a coluna na seção Columns. Se houver uma tag, um símbolo de tag aparecerá ao lado do nome da coluna. Passe o mouse sobre o símbolo para ver o nome e o valor da tag.

Identificar e corrigir a falta de tags ou valores incorretos de tags

Se houver uma tag em uma coluna, há uma boa chance de que a mesma tag seja aplicada às colunas upstream e downstream que compartilham a linhagem com a coluna. Da mesma forma, o valor de uma tag nas colunas upstream e downstream geralmente precisa ser o mesmo.

O fluxo de trabalho de linhagem de dados identifica as tags que estão faltando nas colunas upstream e downstream e as tags que têm um valor diferente. Em seguida, ele ajuda você a aplicar as tags ausentes ou a alterar o valor da tag nessas colunas.

  1. Abra a guia Linhagem e selecione o objeto que contém a coluna que você deseja rastrear. Um painel lateral é aberto.

  2. Passe o mouse sobre o nome da coluna no painel lateral e selecione View Lineage.

  3. Na caixa de diálogo View Column Lineage, selecione Downstream Lineage ou Upstream Lineage.

    Se houver tags ausentes ou valores de tag diferentes na coluna downstream ou upstream, será exibido um banner. Você pode usar o código de cores na coluna Tags para identificar o que está errado com a tag:

    • Se uma tag tiver uma borda tracejada, a coluna não tem a tag aplicada.

    • Se uma tag tiver uma borda amarela, o valor da tag não é igual.

  4. Para corrigir essas tags ausentes ou incompatíveis, faça o seguinte:

    1. Selecione Review and Apply.

    2. Depois de confirmar que você deseja aceitar as alterações propostas, selecione Apply.

Identificar políticas de mascaramento

  1. Abra a guia Linhagem e selecione o objeto desejado. Um painel lateral é aberto.

  2. Para visualizar a política de mascaramento em uma coluna do objeto, localize a coluna na seção Columns. Se a coluna estiver protegida por uma política de mascaramento, um símbolo aparecerá ao lado do nome da coluna. Passe o mouse sobre o símbolo para ver o nome e os detalhes da política de mascaramento.

    Se houver um problema com a política de mascaramento, por exemplo, se houver várias políticas de mascaramento atribuídas à mesma coluna, será exibido Policy Error em vez do símbolo de mascaramento. Se você passar o mouse sobre Policy Error, será exibida uma explicação do erro. Para obter ajuda adicional para identificar por que o erro pode ter ocorrido, consulte Descoberta de tags e políticas e Solução de problemas de políticas de mascaramento baseadas em tags.

Recuperar a linhagem de forma programática

Você pode usar a função GET_LINEAGE (SNOWFLAKE.CORE) para recuperar informações de linhagem de forma programática. Essa função retorna um subconjunto das informações fornecidas pela guia Lineage na Snowsight.

Operações compatíveis com a linhagem de dados

As operações a seguir criam relacionamentos upstream e downstream entre um objeto de origem e um objeto de destino:

Objetos com suporte

A linhagem de dados oferece suporte à movimentação de dados e a dependência entre objetos semelhantes a tabelas. Um objeto «semelhante a uma tabela» é qualquer objeto que possa ser consultado como uma tabela, inclusive tabelas (nada é mais semelhante a uma tabela do que uma tabela). Os objetos do tipo tabela incluem:

  • Tabelas

  • Tabelas dinâmicas

  • Tabelas externas

  • Tabelas Iceberg

  • Exibições

  • Exibições materializadas

Os estágios também podem participar de relacionamentos de linhagem de dados, assim como os seguintes objetos de aprendizado de máquina.

A linhagem de colunas é compatível entre colunas em quaisquer dois objetos do tipo tabela. É possível, por exemplo, selecionar uma coluna em uma tabela para visualizar a linhagem da coluna downstream, que mostra os outros objetos semelhantes a tabelas em que essa coluna aparece.

Além disso, é possível ver as associações de políticas de tags e mascaramento se estiver usando uma função que tenha privilégios para gerenciar tags e políticas de mascaramento.

Linhagem de ML

A linhagem de ML oferece suporte especificamente a relações de aprendizado de máquina, que se concentram em como os dados são usados e transformados em fluxos de trabalho de aprendizado de máquina, em vez de relações mais simples de movimento ou dependência. Há suporte para relacionamentos entre os seguintes tipos de objetos:

Controle de acesso às informações de linhagem

Uma função com os seguintes privilégios pode acessar a guia Lineage e visualizar as dependências e os objetos de linhagem upstream e downstream de um objeto:

  • VIEW LINEAGE na conta.

  • Qualquer privilégio nos objetos para os quais você deseja avaliar a linhagem, como SELECT em uma tabela.

  • USAGE no banco de dados e no esquema que contém o objeto.

O privilégio VIEW LINEAGE controla se um usuário pode visualizar a linhagem de dados de seus objetos. Por padrão, a função PUBLIC tem esse privilégio, o que significa que todos podem visualizar a linhagem. Para restringir quem pode visualizar a linhagem, você pode revogar o privilégio VIEW LINEAGE da função PUBLIC e concedê-lo a funções personalizadas.

Se um usuário não tiver privilégios para um objeto upstream ou downstream no gráfico de linhagem, o objeto aparecerá em cinza com uma mensagem informando que ele não tem privilégios suficientes para visualizar o objeto. O objeto cinza não significa um nó terminal no gráfico de linhagem; ele apenas indica que o usuário não pode visualizar a linhagem mais upstream ou downstream desse ponto porque não tem privilégios para obter a linhagem desse objeto. Esse comportamento também se aplica a objetos e colunas protegidos por outras políticas de acesso.

Um usuário deve ter privilégios para acessar o Exibição QUERY_HISTORY para ver a instrução SQL que resultou no objeto de destino.

Permitir que os usuários visualizem a linhagem de todos os objetos

Você pode configurar uma função para visualizar todos os objetos na linhagem, mesmo que ela não tenha privilégios sobre os objetos, o banco de dados ou o esquema. Basta conceder à função o privilégio RESOLVE ALL na conta, por exemplo, GRANT RESOLVE ALL ON ACCOUNT TO ROLE lineage_role;. A função ainda requer o privilégio VIEW LINEAGE.

Nós de tabela renomeados e excluídos

As tabelas renomeadas são mostradas no gráfico, mas as tabelas excluídas não são mostradas.

Histórico e retenção da linhagem

A linhagem foi introduzida no Snowflake em novembro de 2024. As informações sobre a linhagem estão disponíveis da seguinte forma:

  • A linhagem de uma dependência de objeto (por exemplo, uma visualização baseada em uma tabela) que ocorreu antes dessa data está disponível.

  • A linhagem de movimentação de dados (por exemplo, usando uma instrução CTAS para criar uma tabela a partir de outra tabela) que ocorreu antes dessa data não está disponível.

As informações históricas são mantidas da seguinte forma:

  • A linhagem da coluna é mantida por um ano.

  • A linhagem do objeto é mantida por um ano.

Limitações e considerações

  • A linhagem não está disponível para os seguintes tipos de objetos:

    • Objetos em um banco de dados compartilhado.

    • Objetos no banco de dados compartilhado SNOWFLAKE.

    • Objetos no INFORMATION_SCHEMA de um banco de dados.

  • As tabelas dinâmicas aparecem no gráfico de linhagem para outros objetos, mas a guia Lineage não aparece para as próprias tabelas dinâmicas.

  • A linhagem não inclui uma tabela que foi usada para filtragem ou união quando os dados não foram movidos da tabela para o objeto downstream. No exemplo a seguir, a tabela t2 não é considerada parte da linhagem da tabela target_table:

    CREATE TABLE target_table AS
      SELECT t1.c1, t1.c2
        FROM t1, t2
        WHERE t1.c3 = t2.c3;
    
    Copy
  • A linhagem não consegue rastrear a movimentação de dados que resulta de consultas separadas e desunidas. Por exemplo, o conjunto de consultas a seguir não resulta da linhagem da tabela sourceTable1 para a tabela target_table.

    SET read_output1 = (SELECT c1 FROM sourceTable1);
    
    INSERT INTO target_table(c1) VALUES ($read_output1);
    
    Copy