Share via


Informazioni di riferimento sulle tabelle di sistema di derivazione

Importante

Questa funzionalità è disponibile in anteprima pubblica.

Questo articolo offre una panoramica delle due tabelle di sistema di derivazione. Queste tabelle di sistema si basano sulla funzionalità di derivazione dei dati di Unity Catalog, consentendo di eseguire query a livello di codice sui dati di derivazione per alimentare processi decisionali e report.

Esistono due tabelle di sistema di derivazione:

  • system.access.table_lineage
  • system.access.column_lineage

Nota

Entrambe le tabelle di derivazione rappresentano un subset di tutti gli eventi di lettura/scrittura, perché non è sempre possibile acquisire la derivazione. I record vengono generati solo quando è possibile dedurre la derivazione.

Tabella di derivazione tabella

La tabella di sistema di derivazione della tabella include un record per ogni evento di lettura o scrittura in una tabella o un percorso del catalogo Unity. Ciò include, ad esempio, esecuzioni di processi, esecuzioni di notebook e dashboard aggiornati con l'evento di lettura o scrittura.

Tabella di derivazione delle colonne

La tabella di derivazione della colonna non include eventi che non dispongono di un'origine. Ad esempio, se si inserisce in una colonna usando valori espliciti, non viene acquisito. Se si legge una colonna, viene acquisita se si scrive o meno l'output. La derivazione delle colonne non è supportata per le tabelle live Delta.

Schema della tabella di sistema di derivazione

Le tabelle di sistema di derivazione usano lo schema seguente. Lo schema di derivazione della tabella non include source_column_name e target_column_name.

Nome colonna Tipo di dati Descrizione Esempio
account_id string ID dell'account Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id string ID del metastore del catalogo Unity. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id string ID dell'area di lavoro 123456789012345
entity_type string Tipo di entità da cui è stata acquisita la transazione di derivazione. Il valore è NOTEBOOK, JOB, PIPELINEDBSQL_DASHBOARD, DBSQL_QUERY, o NULL. NOTEBOOK
entity_id string ID dell'entità da cui è stata acquisita la transazione di derivazione. Se entity_type è NULL, entity_id è NULL. *Taccuino: 23098402394234
*Lavoro: 23098402394234
* Query SQL di Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Dashboard SQL di Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Pipeline: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id string ID per descrivere l'esecuzione univoca dell'entità o NULL. Questo comportamento è diverso per ogni tipo di entità:

* Notebook: command_run_id
* Processo: job_run_id
* Query SQL di Databricks: query_run_id
* Dashboard SQL di Databricks: query_run_id
* Pipeline: pipeline_update_id

Se entity_type è NULL, entity_run_id è NULL.
*Taccuino: 23098402394234
*Lavoro: 23098402394234
* Query SQL di Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Dashboard SQL di Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Pipeline: e9cd8a31-de2f-4206-adfa-4f6605d68d88
source_table_full_name string Nome in tre parti per identificare la tabella di origine. catalog.schema.table
source_table_catalog string Catalogo della tabella di origine. catalog
source_table_schema string Schema della tabella di origine. catalog.schema
source_table_name string Nome della tabella di origine. table
source_path string Percorso nell'archiviazione cloud della tabella di origine o percorso se legge direttamente dall'archiviazione cloud. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type string Tipo dell'origine. Il valore è TABLE, PATH, VIEWo STREAMING_TABLE. TABLE
source_column_name string Nome della colonna di origine. date
target_table_full_name string Nome in tre parti per identificare la tabella di destinazione. catalog.schema.table
target_table_catalog string Catalogo della tabella di destinazione. catalog
target_table_schema string Schema della tabella di destinazione. catalog.schema
target_table_name string Nome della tabella di destinazione. table
target_path string Posizione nell'archiviazione cloud della tabella di destinazione. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type string Tipo della destinazione. Il valore è TABLE, PATH, VIEWo STREAMING TABLE. TABLE
target_column_name string Nome della colonna di destinazione. date
created_by string Utente che ha generato questa derivazione. Può trattarsi di un nome utente di Azure Databricks, un ID entità servizio di Azure Databricks, "System-User" o NULL se le informazioni utente non possono essere acquisite. crampton.rods@email.com
event_time timestamp Timestamp in cui è stata generata la derivazione. 2023-06-20T19:47:21.194+0000
event_date data Data di generazione della derivazione. Si tratta di una colonna partizionata. 2023-06-20

Lettura delle tabelle di sistema di derivazione

Quando si analizzano le tabelle di sistema di derivazione, tenere presente quanto segue:

  • entity_typePer , Azure Databricks supporta tabelle Live Delta, notebook, processi, query SQL di Databricks e dashboard. Gli eventi di altre entità non sono supportati.
  • Se viene visualizzato entity_type come null, significa che nell'evento non è coinvolta alcuna entità di Azure Databricks. Ad esempio, potrebbe trattarsi del risultato di una query JDBC o di un utente che fa clic nella scheda Dati di esempio nell'interfaccia utente di Azure Databricks.
  • Per determinare se l'evento è stato letto o scritto, è possibile visualizzare il tipo di origine e il tipo di destinazione.
    • Sola lettura: il tipo di origine non è Null, ma il tipo di destinazione è Null.
    • Solo scrittura: il tipo di destinazione non è Null, ma il tipo di origine è Null.
    • Lettura e scrittura: il tipo di origine e il tipo di destinazione non sono Null.

Esempio di tabella di sistema di derivazione

Come esempio di come viene registrata la derivazione nelle tabelle di sistema, di seguito è riportato un esempio di query seguita dai record di derivazione creati dalla query:

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);

Il record in system.access.table_lineage sarà simile al seguente:

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

Il record in system.access.column_lineage sarà simile al seguente:

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

Non tutte le colonne di derivazione sono illustrate nell'esempio precedente. Per lo schema completo, vedere lo schema di derivazione precedente.

Risoluzione dei problemi relativi alle query sulle tabelle esterne

Quando si fa riferimento a una tabella esterna usando il relativo percorso di archiviazione cloud, il record di derivazione associato include solo il nome del percorso e non il nome della tabella. Ad esempio, il record di derivazione per questa query include il nome del percorso e non il nome della tabella:

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

Se si sta tentando di eseguire query sui record di derivazione per una tabella esterna a cui fa riferimento il percorso, sarà necessario filtrare la query usando source_path o target_path anziché source_table_full_name o target_table_full_name. Ad esempio, la query seguente esegue il pull di tutti i record di derivazione per una tabella esterna:

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";

Esempio: Recuperare record di derivazione in base al nome della tabella esterna

Se non si vuole recuperare manualmente il percorso di archiviazione cloud per trovare la derivazione, è possibile usare la funzione seguente per ottenere dati di derivazione usando il nome della tabella. È anche possibile sostituire system.access.table_lineage con system.access.column_lineage nella funzione se si desidera eseguire una query sulla derivazione delle colonne.

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)
  )

Usare quindi il comando seguente per chiamare la funzione e visualizzare i record di derivazione per la tabella esterna:

display(getLineageForTable("table_name"))