Compartilhar via


Referência das tabelas do sistema de linhagem

Esta página inclui uma referência para as duas tabelas do sistema de linhagem. Essas tabelas do sistema se baseiam em recurso de linhagem de dados do Catálogo do Unity, permitindo que você consulte programaticamente dados de linhagem para alimentar a tomada de decisões e relatórios. Para acessar as tabelas, os esquemas devem ser habilitados em seu system catálogo. Para obter mais informações, consulte Habilitar tabelas do sistema.

Note

Ambas as tabelas de linhagem representam um subconjunto de todos os eventos de leitura/gravação, pois nem sempre é possível capturar a linhagem. Os registros só são emitidos quando a linhagem pode ser inferida. As limitações de linhagem de dados descritas nas limitações de linhagem também se aplicam às tabelas do sistema de linhagem.

Tabela de linhagem de tabela

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 do Unity. Isso inclui, dentre outros, execuções de trabalho, execuções de notebook e painéis atualizados com o evento de leitura ou gravação.

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

Esquema de linhagem de tabela

A tabela do sistema de linhagem usa o esquema a seguir.

Nome da coluna Tipo de dados Description Example
account_id cadeia A ID de uma conta do Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id cadeia A ID do metastore do Unity Catalog. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id cadeia A ID do workspace 123456789012345
entity_type cadeia O tipo de entidade associada ao registro de linhagem, se houver. O valor é NOTEBOOK, JOB, , PIPELINEDASHBOARD_V3DBSQL_DASHBOARD (painel herdado) DBSQL_QUERYou NULL.
Observação: consulte entity_metadata a coluna para obter informações sobre todas as entidades envolvidas no registro de linhagem.
JOB
entity_id cadeia A ID da entidade associada ao registro de linhagem ou NULL.
Observação: consulte entity_metadata a coluna para obter informações sobre todas as entidades envolvidas no registro de linhagem.
417306252667357
entity_run_id cadeia A ID de execução exclusiva da entidade associada ao registro de linhagem ou NULL.
Observação: consulte entity_metadata a coluna para obter informações sobre todas as entidades envolvidas no registro de linhagem.
688612062233399
source_table_full_name cadeia Nome de três partes para identificar a tabela de origem. catalog.schema.table
source_table_catalog cadeia O catálogo da tabela de origem. catalog
source_table_schema cadeia O esquema da tabela de origem. schema
source_table_name cadeia O nome da tabela de origem. table
source_path cadeia Local 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 cadeia O tipo da origem. O valor é TABLE, PATH, , VIEW, MATERIALIZED_VIEW, METRIC_VIEWou STREAMING_TABLE. TABLE
target_table_full_name cadeia Nome de três partes para identificar a tabela de destino. catalog.schema.table
target_table_catalog cadeia O catálogo da tabela de destino. catalog
target_table_schema cadeia O esquema da tabela de destino. schema
target_table_name cadeia O nome da tabela de destino. table
target_path cadeia Local no armazenamento em nuvem da tabela de destino abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type cadeia O tipo do destino. O valor é TABLE, PATH, , VIEW, MATERIALIZED_VIEW, METRIC_VIEWou STREAMING_TABLE. TABLE
created_by cadeia O usuário que gerou essa linhagem. Isso pode ser um nome de usuário do Azure Databricks, uma ID da entidade de serviço do Azure Databricks, "System-User" 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 representando UTC. 2025-04-20T19:47:21.194+00:00
event_date date A data em que a linhagem foi gerada. Essa é uma coluna particionada. 2025-04-20
record_id cadeia A ID exclusiva do registro de linhagem. Esse valor é gerado automaticamente e não pode ser associado a nenhuma tabela. 3c5c8eed-87bb-3aa6-8a86-80d00d48299e
event_id cadeia A ID exclusiva para um único evento de linhagem. Várias linhas poderão compartilhar o mesmo event_id se forem geradas pelo mesmo evento. Esse valor é gerado automaticamente e não pode ser associado a nenhuma tabela. ca123ff3-f3f8-332b-a832-0154a6327353
statement_id cadeia A ID exclusiva de uma instrução de consulta que gerou o evento de linhagem. Essa é uma chave estrangeira para ingressar na tabela do sistema de histórico de consultas. Esse valor só é definido quando a consulta é executada em um sql warehouse. 1234526f-a6ac-475c-8601-e8637f8ee039
entity_metadata struct Metadados sobre a entidade responsável pelo evento de linhagem. Ver metadados de entidade

Tabela de linhagem de coluna

A tabela de linhagem de coluna não inclui eventos que não têm uma origem. 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 se você gravar ou não a saída.

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

Esquema de linhagem de coluna

A tabela do sistema de linhagem de coluna usa o seguinte esquema:

Nome da coluna Tipo de dados Description Example
account_id cadeia A ID de uma conta do Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id cadeia A ID do metastore do Unity Catalog. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id cadeia A ID do workspace 123456789012345
entity_type cadeia O tipo de entidade associada ao registro de linhagem, se houver. O valor é NOTEBOOK, JOB, , PIPELINEDASHBOARD_V3DBSQL_DASHBOARD (painel herdado) DBSQL_QUERYou NULL.
Observação: consulte entity_metadata a coluna para obter informações sobre todas as entidades envolvidas no registro de linhagem.
JOB
entity_id cadeia A ID da entidade associada ao registro de linhagem ou NULL.
Observação: consulte entity_metadata a coluna para obter informações sobre todas as entidades envolvidas no registro de linhagem.
417306252667357
entity_run_id cadeia A ID de execução exclusiva da entidade associada ao registro de linhagem ou NULL.
Observação: consulte entity_metadata a coluna para obter informações sobre todas as entidades envolvidas no registro de linhagem.
688612062233399
source_table_full_name cadeia Nome de três partes para identificar a tabela de origem. catalog.schema.table
source_table_catalog cadeia O catálogo da tabela de origem. catalog
source_table_schema cadeia O esquema da tabela de origem. schema
source_table_name cadeia O nome da tabela de origem. table
source_path cadeia Local 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 cadeia O tipo da origem. O valor é TABLE, PATH, , VIEW, MATERIALIZED_VIEW, METRIC_VIEWou STREAMING_TABLE. TABLE
source_column_name cadeia O nome da coluna de origem. date
target_table_full_name cadeia Nome de três partes para identificar a tabela de destino. catalog.schema.table
target_table_catalog cadeia O catálogo da tabela de destino. catalog
target_table_schema cadeia O esquema da tabela de destino. schema
target_table_name cadeia O nome da tabela de destino. table
target_path cadeia Local no armazenamento em nuvem da tabela de destino abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type cadeia O tipo do destino. O valor é TABLE, PATH, , VIEW, MATERIALIZED_VIEW, METRIC_VIEWou STREAMING_TABLE. TABLE
target_column_name cadeia O nome da coluna de destino. date
created_by cadeia O usuário que gerou essa linhagem. Isso pode ser um nome de usuário do Azure Databricks, uma ID da entidade de serviço do Azure Databricks, "System-User" 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 representando UTC. 2025-04-20T19:47:21.194+00:00
event_date date A data em que a linhagem foi gerada. Essa é uma coluna particionada. 2025-04-20
record_id cadeia A ID exclusiva do registro de linhagem. Esse valor é gerado automaticamente e não pode ser associado a nenhuma tabela. 3c5c8eed-87bb-3aa6-8a86-80d00d48299e
event_id cadeia A ID exclusiva para um único evento de linhagem. Várias linhas poderão compartilhar o mesmo event_id se forem geradas pelo mesmo evento. Esse valor é gerado automaticamente e não pode ser associado a nenhuma tabela. ca123ff3-f3f8-332b-a832-0154a6327353
statement_id cadeia A ID exclusiva de uma instrução de consulta que gerou o evento de linhagem. Essa é uma chave estrangeira para ingressar na tabela do sistema de histórico de consultas. Esse valor só é definido quando a consulta é executada em um sql warehouse. 1234526f-a6ac-475c-8601-e8637f8ee039
entity_metadata struct Metadados sobre a entidade responsável pelo evento de linhagem. Ver metadados de entidade

Tabelas do sistema de linhagem de dados

  • Para determinar se o evento era 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.

Referência de metadados de entidade

O entity_metadata struct tem o seguinte esquema:

job_info:
  job_id: "string"
  job_run_id: "string"
dashboard_id: "string"
legacy_dashboard_id: "string"
notebook_id: "string"
sql_query_id: "string"
dlt_pipeline_info:
  dlt_pipeline_id: "string"
  dlt_update_id: "string"

O Azure Databricks registra eventos de linhagem de Pipelines Declarativos do Lakeflow Spark, notebooks, trabalhos, consultas SQL do Databricks e dashboards. Não há suporte para eventos de outras entidades.

Vários valores podem ser preenchidos dependendo do tipo de evento. Por exemplo, um trabalho que executa uma tarefa de notebook preencheria ambos job_info e notebook_id.

Se todos os valores em entity_metadata forem null, isso significa que nenhuma entidade do Azure Databricks esteve 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.

Exemplo de tabela do sistema de linhagem

Como exemplo de como a linhagem é registrada em tabelas do sistema, aqui está uma consulta de exemplo seguida 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 semelhante a:

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 semelhante a:

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

Note

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

Analisando a popularidade da tabela usando a tabela de linhagem de tabela

A tabela do sistema de linhagem de tabela pode ser usada para estimar a popularidade das tabelas. Por exemplo, o snippet a seguir recupera as 100 principais tabelas consultadas com mais frequência nos últimos 7 dias:

SELECT
  source_table_full_name,
  COUNT(distinct event_id) AS num_of_queries
FROM
  system.access.table_lineage t
WHERE
  t.event_date > CURRENT_DATE() - INTERVAL 7 DAYS
  AND t.source_table_full_name IS NOT NULL
GROUP BY source_table_full_name
ORDER BY num_of_queries DESC
LIMIT 100;

Você pode ingressar com a tabela do sistema de histórico de consultas para obter detalhes adicionais sobre consultas executadas em sql warehouses ou computação sem servidor, incluindo aquelas fornecidas do cache (observe que as tabelas do sistema de linhagem não emitem entradas para resultados da consulta armazenada em cache). Por exemplo, o snippet a seguir recupera tabelas com consultas que excedem uma hora de tempo de execução nos últimos 7 dias:

SELECT
  t.source_table_full_name,
  COUNT(distinct event_id) AS num_of_queries_over_hour
FROM
  system.query.history h
INNER JOIN system.access.table_lineage t
  ON t.statement_id = h.cache_origin_statement_id
WHERE
  h.total_duration_ms > 3600000
  AND t.event_date > CURRENT_DATE() - INTERVAL 7 DAYS
  AND t.source_table_full_name IS NOT NULL
GROUP BY t.source_table_full_name
ORDER BY num_of_queries_over_hour DESC;

Solução de problemas de consultas de tabela externa

Quando você referencia 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 dessa 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, deverá 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 de 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";

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 a linhagem, poderá usar a função a seguir 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"))