Referência das tabelas do sistema de linhagem

Importante

Esta tabela do sistema está em Visualização pública. Para acessar a tabela, o esquema deve ser habilitado em seu system catálogo. Para obter mais informações, consulte Habilitar esquemas de tabela do sistema.

Este artigo fornece uma visão geral das duas tabelas do sistema de linhagem. Essas tabelas do sistema se baseiam no recurso de linhagem de dados do Unity Catalog, permitindo que você consulte programaticamente dados de linhagem para alimentar a tomada de decisões e relatórios.

Nota

Ambas as tabelas de linhagem representam um subconjunto de todos os eventos de leitura/gravação, pois nem sempre é possível capturar linhagem. Os registros só são emitidos quando a linhagem pode ser inferida.

Tabela de linhagem

A tabela do sistema de linhagem de tabela inclui um registro para cada evento de leitura ou gravação em uma tabela ou caminho do Catálogo Unity. Isso inclui, mas não está limitado a, execuções de trabalho, execuções de bloco de anotações e painéis atualizados com o evento de leitura ou gravação.

Caminho da tabela: Esta tabela do sistema está localizada em system.access.table_lineage.

Tabela de linhagem de colunas

A tabela de linhagem de colunas não inclui eventos que não tenham uma fonte. Por exemplo, se você inserir em uma coluna usando valores explícitos, ela não será capturada. Se você ler uma coluna, ela será capturada independentemente de você escrever ou não a saída. A linhagem de colunas não é suportada para Delta Live Tables.

Caminho da tabela: Esta tabela do sistema está localizada em system.access.column_lineage.

Esquema da tabela do sistema de linhagem

As tabelas do sistema de linhagem usam o esquema a seguir. O esquema de linhagem da tabela não inclui source_column_name e target_column_name.

Nome da coluna Tipo de dados Description Exemplo
account_id string A ID da conta do Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id string A ID do metastore do Unity Catalog. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id string A ID do espaço de trabalho 123456789012345
entity_type string O tipo de entidade da qual a transação de linhagem foi capturada. O valor é NOTEBOOK, JOB, PIPELINE, DASHBOARD_V3 (Dashboard), DBSQL_DASHBOARD (Legacy dashboard), DBSQL_QUERY, OR NULL. NOTEBOOK
entity_id string O ID da entidade da qual a transação de linhagem foi capturada. Se entity_type é NULL, entity_id é NULL. - Caderno: 23098402394234
- Emprego: 23098402394234
- Consulta SQL Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
- Painel: 01ef070d110715f2b6d3061b8bda89ea
- Painel legado: e9cd8a31-de2f-4206-adfa-4f6605d68d88
- Gasoduto: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id string ID para descrever a execução exclusiva da entidade, ou NULL. Isso difere para cada tipo de entidade:

- Caderno: command_run_id
- Trabalho: job_run_id
- Consulta SQL Databricks: query_run_id
- Painel: query_run_id
- Painel legado: query_run_id
- Gasoduto: pipeline_update_id

Se entity_type é NULL, entity_run_id é NULL.
- Caderno: e3cr5a10-de6f-6206-fdfa-4f5505d68d55
- Emprego: 51090402394234
- Consulta SQL Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
- Painel: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
- Painel legado: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
- Gasoduto: c5am1e0r-on2f-4206-adfa-4f6605d68d88
source_table_full_name string Nome de três partes para identificar a tabela de origem. catalog.schema.table
source_table_catalog string O catálogo da tabela de origem. catalog
source_table_schema string O esquema da tabela de origem. catalog.schema
source_table_name string O nome da tabela de origem. table
source_path string Localização no armazenamento em nuvem da tabela de origem, ou o caminho, se estiver lendo diretamente do armazenamento em nuvem. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type string O tipo da fonte. O valor é TABLE, PATH, VIEW, ou STREAMING_TABLE. TABLE
source_column_name string O nome da coluna de origem. date
target_table_full_name string Nome em três partes para identificar a tabela de destino. catalog.schema.table
target_table_catalog string O catálogo da tabela de destino. catalog
target_table_schema string O esquema da tabela de destino. catalog.schema
target_table_name string O nome da tabela de destino. table
target_path string Localização no armazenamento em nuvem da tabela de destino. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type string O tipo do alvo. O valor é TABLE, PATH, VIEW,ou STREAMING TABLE. TABLE
target_column_name string O nome da coluna de destino. date
created_by string O usuário que gerou essa linhagem. Pode ser um nome de usuário do Azure Databricks, uma ID da entidade de serviço do Azure Databricks, "Usuário do Sistema" ou NULL se as informações do usuário não puderem ser capturadas. crampton.rods@email.com
event_time carimbo de data/hora O carimbo de data/hora quando a linhagem foi gerada. As informações de fuso horário são registradas no final do valor com +00:00 a representação UTC. 2023-06-20T19:47:21.194+00:00
event_date data A data em que a linhagem foi gerada. Esta é uma coluna particionada. 2023-06-20

Leitura de tabelas do sistema de linhagem

Tome nota das seguintes considerações ao analisar tabelas de sistemas de linhagem:

  • Para o , o entity_typeAzure Databricks suporta Delta Live Tables, blocos de notas, trabalhos, consultas SQL Databricks e dashboards. Não há suporte para eventos de outras entidades.
  • Se você vir o entity_type como null, isso significa que nenhuma entidade do Azure Databricks está envolvida no evento. Por exemplo, pode ser o resultado de uma consulta JDBC ou de um usuário clicando na guia Dados de Exemplo na interface do usuário do Azure Databricks.
  • Para determinar se o evento foi uma leitura ou uma gravação, você pode exibir o tipo de origem e o tipo de destino.
    • Somente leitura: o tipo de origem não é nulo, mas o tipo de destino é nulo.
    • Somente gravação: O tipo de destino não é nulo, mas o tipo de origem é nulo.
    • Leitura e gravação: O tipo de origem e o tipo de destino não são nulos.

Exemplo de tabela do sistema de linhagem

Como um exemplo de como a linhagem é registrada em tabelas do sistema, aqui está um exemplo de consulta seguido pelos registros de linhagem que a consulta cria:

CREATE OR REPLACE TABLE car_features
AS SELECT *,  in1+in2 as premium_feature_set
FROM car_features_exterior
JOIN car_features_interior
USING(id, model);

O registro em system.access.table_lineage seria parecido com:

entity_type entity_id source_table_name target_table_name created_by event_time
NOTEBOOK 27080565267 car_features_exterior car_features crampton@email.com 2023-01-25T16:19:58.908+0000
NOTEBOOK 27080565267 car_features_interior car_features crampton@email.com 2023-01-25T16:19:58.908+0000

O registro em system.access.column_lineage seria parecido com:

entity_type entity_id source_table_name target_table_name source_column_name target_column_name event_time
NOTEBOOK 27080565267 car_features_interior car_features in1 premium_feature_set 2023-01-25T16:19:58.908+0000
NOTEBOOK 27080565267 car_features_interior car_features in2 premium_feature_set 2023-01-25T16:19:58.908+0000

Nota

Nem todas as colunas de linhagem são mostradas no exemplo acima. Para obter o esquema completo, consulte o esquema de linhagem acima.

Solução de problemas de consultas de tabelas externas

Quando você faz referência a uma tabela externa usando seu caminho de armazenamento em nuvem, o registro de linhagem associado inclui apenas o nome do caminho e não o nome da tabela. Por exemplo, o registro de linhagem para esta consulta incluiria o nome do caminho e não o nome da tabela:

SELECT * FROM delta.`abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1`;

Se você estiver tentando consultar registros de linhagem para uma tabela externa referenciada por caminho, será necessário filtrar a consulta usando source_path ou target_path em vez de source_table_full_name ou target_table_full_name. Por exemplo, a consulta a seguir extrai todos os registros de linhagem para uma tabela externa:

SELECT *
FROM system.access.table_lineage
WHERE
  source_path = "abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1" OR
  target_path = "abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1";

Exemplo: Recuperar registros de linhagem com base no nome da tabela externa

Se você não quiser recuperar manualmente o caminho de armazenamento em nuvem para encontrar linhagem, você pode usar a seguinte função para obter dados de linhagem usando o nome da tabela. Você também pode substituir system.access.table_lineage por system.access.column_lineage na função se quiser consultar a linhagem da coluna.

def getLineageForTable(table_name):
  table_path = spark.sql(f"describe detail {table_name}").select("location").head()[0]

  df = spark.read.table("system.access.table_lineage")
  return df.where(
    (df.source_table_full_name == table_name)
    | (df.target_table_full_name == table_name)
    | (df.source_path == table_path)
    | (df.target_path == table_path)
  )

Em seguida, use o seguinte comando para chamar a função e exibir registros de linhagem para a tabela externa:

display(getLineageForTable("table_name"))