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 estar habilitado em seu catálogo system
. Para obter mais informações, consulte Habilitar esquemas da tabela do sistema.
Esse 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 Catálogo do Unity, permitindo que você consulte programaticamente dados de linhagem para alimentar a tomada de decisões e relatórios.
Observação
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.
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, mas não se limita a execuções de trabalho, execuções de notebook 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 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. Não há suporte para a linhagem de coluna para o Tabelas Dinâmicas Delta.
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 de tabela não inclui source_column_name
e target_column_name
.
Nome da coluna | Tipo de dados | Descrição | Exemplo |
---|---|---|---|
account_id |
string | A ID de uma conta do Azure Databricks. | 7af234db-66d7-4db3-bbf0-956098224879 |
metastore_id |
string | A ID do metastore do Catálogo do Unity. | 5a31ba44-bbf4-4174-bf33-e1fa078e6765 |
workspace_id |
string | A ID do workspace. | 123456789012345 |
entity_type |
string | O tipo de entidade da qual a transação de linhagem foi capturada. O valor é NOTEBOOK , JOB , PIPELINE , DASHBOARD_V3 (painel), DBSQL_DASHBOARD (painel herdado), DBSQL_QUERY OU NULL . |
NOTEBOOK |
entity_id |
string | A ID da entidade da qual a transação de linhagem foi capturada. Se entity_type for NULL , entity_id é NULL . |
- Notebook: 23098402394234 - Trabalho: 23098402394234 - Consulta SQL do Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88 - Painel: 01ef070d110715f2b6d3061b8bda89ea - Painel herdado: e9cd8a31-de2f-4206-adfa-4f6605d68d88 - Pipeline: 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:- Notebook: command_run_id - Trabalho: job_run_id - Consulta SQL do Databricks: query_run_id - Painel: query_run_id - Painel herdado: query_run_id - Pipeline: pipeline_update_id Se entity_type for NULL , entity_run_id é NULL . |
- Notebook: e3cr5a10-de6f-6206-fdfa-4f5505d68d55 - Trabalho: 51090402394234 - Consulta SQL do Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88 - Painel: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55 - Painel herdado: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55 - Pipeline: 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 | 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 |
string | O tipo da origem. 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 de 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 | Local 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 destino. 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. 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 |
timestamp | 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. |
2023-06-20T19:47:21.194+00:00 |
event_date |
date | A data em que a linhagem foi gerada. Essa é uma coluna particionada. | 2023-06-20 |
Tabelas do sistema de linhagem de dados
Observe as seguintes considerações ao analisar tabelas do sistema de linhagem:
- Para o
entity_type
, o Azure Databricks é compatível com Tabelas Dinâmicas Delta, notebooks, trabalhos, consultas SQL do Databricks e painéis. Eventos de outras entidades não são compatíveis. - Se você vir o
entity_type
comonull
, 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 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.
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 |
Observação
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 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 de uma tabela externa referenciada por caminho, precisará 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";
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 localizar a linhagem, poderá 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"))