Share via


Referenz zu Herkunftssystemtabellen

Wichtig

Dieses Feature befindet sich in der Public Preview.

Dieser Artikel bietet eine Übersicht über die beiden Systemtabellen für die Datenherkunft. Diese Systemtabellen bauen auf dem Datenherkunftsfeature von Unity Catalog auf und ermöglichen programmgesteuertes Abfragen von Datenherkunftsdaten für die Entscheidungsfindung und für Berichte.

Es gibt zwei Systemtabellen für die Datenherkunft:

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

Hinweis

Beide Datenherkunftstabellen stellen eine Teilmenge aller Lese-/Schreibereignisse dar, da eine Erfassung der Datenherkunft nicht immer möglich ist. Datensätze werden nur ausgegeben, wenn die Datenherkunft abgeleitet werden kann.

Tabelle für die Tabellendatenherkunft

Die Systemtabelle für die Tabellendatenherkunft enthält einen Datensatz für jedes Lese- oder Schreibereignis in einer Unity Catalog-Tabelle oder an einem Unity Catalog-Pfad. Dies umfasst unter anderem Auftragsausführungen, Notebookausführungen und Dashboards, die mit dem Lese- oder Schreibereignis aktualisiert wurden.

Tabelle für die Spaltendatenherkunft

Die Tabelle für die Spaltendatenherkunft enthält keine Ereignisse ohne Quelle. Wenn Sie beispielsweise etwas mit expliziten Werten in eine Spalte einfügen, wird dies nicht erfasst. Wenn Sie eine Spalte lesen, wird sie unabhängig davon erfasst, ob Sie die Ausgabe schreiben. Die Spaltendatenherkunft wird für Delta Live Tables nicht unterstützt.

Schema der Systemtabellen für die Datenherkunft

Die Systemtabellen für die Datenherkunft verwenden das folgende Schema. Im Schema für die Tabellendatenherkunft sind source_column_name und target_column_name nicht enthalten.

Spaltenname Datentyp Beschreibung Beispiel
account_id Zeichenfolge Die ID des Azure Databricks-Kontos. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id Zeichenfolge Die ID des Unity Catalog-Metastore. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id Zeichenfolge Die ID des Arbeitsbereichs. 123456789012345
entity_type Zeichenfolge Der Art der Entität, von der die Datenherkunftstransaktion erfasst wurde. Der Wert kann NOTEBOOK, JOB, PIPELINE, DBSQL_DASHBOARD, DBSQL_QUERY ODER NULL sein. NOTEBOOK
entity_id Zeichenfolge Der ID der Entität, von der die Datenherkunftstransaktion erfasst wurde. Falls entity_type den Wert NULL hat, hat entity_id den Wert NULL. * Notebook: 23098402394234
* Auftrag: 23098402394234
* Databricks SQL-Abfrage: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Databricks SQL-Dashboard: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Pipeline: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id Zeichenfolge ID, um die eindeutige Ausführung der Entität zu beschreiben, oder NULL. Dies unterscheidet sich je nach Entitätstyp:

* Notebook: command_run_id
* Auftrag: job_run_id
* Databricks SQL-Abfrage: query_run_id
* Databricks SQL-Dashboard: query_run_id
* Pipeline: pipeline_update_id

Falls entity_type den Wert NULL hat, hat entity_run_id den Wert NULL.
* Notebook: 23098402394234
* Auftrag: 23098402394234
* Databricks SQL-Abfrage: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Databricks SQL-Dashboard: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Pipeline: e9cd8a31-de2f-4206-adfa-4f6605d68d88
source_table_full_name Zeichenfolge Dreiteiliger Name zum Identifizieren der Quelltabelle. catalog.schema.table
source_table_catalog Zeichenfolge Der Katalog der Quelltabelle. catalog
source_table_schema Zeichenfolge Das Schema der Quelltabelle. catalog.schema
source_table_name Zeichenfolge Der Name der Quelltabelle. table
source_path Zeichenfolge Der Speicherort im Cloudspeicher der Quelltabelle oder der Pfad, wenn direkt aus dem Cloudspeicher gelesen wird. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type Zeichenfolge Die Art der Quelle. Der Wert kann TABLE, PATH, VIEW oder STREAMING_TABLE sein. TABLE
source_column_name Zeichenfolge Der Name der Quellspalte date
target_table_full_name Zeichenfolge Dreiteiliger Name zum Identifizieren der Zieltabelle. catalog.schema.table
target_table_catalog Zeichenfolge Der Katalog der Zieltabelle. catalog
target_table_schema Zeichenfolge Das Schema der Zieltabelle. catalog.schema
target_table_name Zeichenfolge Der Name der Zieltabelle. table
target_path Zeichenfolge Speicherort im Cloudspeicher der Zieltabelle abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type Zeichenfolge Der Typ des Ziels. Der Wert kann TABLE, PATH, VIEW oder STREAMING TABLE sein. TABLE
target_column_name Zeichenfolge Der Name der Zielspalte. date
created_by Zeichenfolge Der Benutzer oder die Benutzerin, der bzw. die diese Datenherkunft generiert hat. Das kann ein Azure Databricks-Benutzername, eine Azure Databricks-Dienstprinzipal-ID, „System-User“ oder auch NULL sein, wenn die Benutzerinformationen nicht erfasst werden können. crampton.rods@email.com
event_time Zeitstempel Der Zeitstempel für den Zeitpunkt, zu dem die Datenherkunft generiert wurde. 2023-06-20T19:47:21.194+0000
event_date date Das Datum, an dem die Datenherkunft generiert wurde. Dies ist eine partitionierte Spalte. 2023-06-20

Lesen von Systemtabellen für die Datenherkunft

Beachten Sie bei der Analyse von Systemtabellen für die Datenherkunft Folgendes:

  • Für entity_type unterstützt Azure Databricks Delta Live Tables, Notebooks, Aufträge, Databricks SQL-Abfragen und Dashboards. Ereignisse von anderen Entitäten werden nicht unterstützt.
  • Wenn entity_type den Wert null hat, bedeutet das, dass keine Azure Databricks-Entität am Ereignis beteiligt ist. Dies kann z. B. das Ergebnis einer JDBC-Abfrage sein oder daraus resultieren, dass ein Benutzer oder eine Benutzerin auf der Azure Databricks-Benutzeroberfläche auf die Registerkarte Beispieldaten geklickt hat.
  • Um zu bestimmen, ob das Ereignis ein Lese- oder Schreibvorgang war, können Sie den Quelltyp und den Zieltyp betrachten.
    • Nur Lesen: Der Quelltyp ist nicht NULL, aber der Zieltyp ist NULL.
    • Nur Schreiben: Der Zieltyp ist nicht NULL, aber der Quelltyp ist NULL.
    • Lesen und Schreiben: Quell- und Zieltyp sind nicht NULL.

Exemplarische Systemtabelle für die Datenherkunft

Als Beispiel für die Erfassung der Datenherkunft in Systemtabellen finden Sie hier eine Beispielabfrage, gefolgt von den Datenherkunftsdatensätzen, die von der Abfrage erstellt werden:

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

Der Datensatz in system.access.table_lineage sieht wie folgt aus:

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

Der Datensatz in system.access.column_lineage sieht wie folgt aus:

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

Hinweis

Im obigen Beispiel werden nicht alle Datenherkunftsspalten angezeigt. Das vollständige Schema finden Sie im obigen Datenherkunftsschema.

Problembehandlung externer Tabellenabfragen

Wenn Sie mithilfe des Cloudspeicherpfads auf eine externe Tabelle verweisen, enthält die zugeordnete Datenherkunftszeile lediglich den Namen des Pfads und nicht der Tabelle. Beispielsweise würde die Datenherkunftszeile für diese Abfrage den Namen des Pfads und nicht der Tabelle enthalten:

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

Wenn Sie versuchen, Datenherkunftszeilen für eine externe Tabelle über den Pfad abzufragen, müssen Sie die Abfrage mithilfe von source_path oder target_path anstelle von source_table_full_name oder target_table_full_name filtern. Die folgende Abfrage pullt beispielsweise alle Datenherkunftszeilen für eine externe Tabelle:

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

Beispiel: Abrufen von Datenherkunftszeilen basierend auf dem Namen der externen Tabelle

Wenn Sie den Cloudspeicherpfad nicht manuell abrufen möchten, um die Datenherkunft zu finden, können Sie die folgende Funktion verwenden, um die Herkunftsdaten mithilfe des Tabellennamens abzurufen. Sie können außerdem system.access.table_lineage in der Funktion durch system.access.column_lineage ersetzen, wenn Sie die Spaltenherkunft abfragen möchten.

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

Verwenden Sie dann den folgenden Befehl, um die Funktion aufzurufen und die Datenherkunftszeilen für die externe Tabelle anzuzeigen:

display(getLineageForTable("table_name"))