Delen via


Verwijzing naar herkomstsysteemtabellen

Belangrijk

Deze functie is beschikbaar als openbare preview.

Dit artikel bevat een overzicht van de twee herkomstsysteemtabellen. Deze systeemtabellen zijn gebaseerd op de gegevensherkomstfunctie van Unity Catalog, zodat u programmatisch query's kunt uitvoeren op herkomstgegevens om beslissingen en rapporten te maken.

Er zijn twee herkomstsysteemtabellen:

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

Notitie

Beide herkomsttabellen vertegenwoordigen een subset van alle lees-/schrijf-gebeurtenissen, omdat het niet altijd mogelijk is om herkomst vast te leggen. Records worden alleen verzonden wanneer herkomst kan worden afgeleid.

Tabelherkomsttabel

De systeemtabel voor tabelherkomsten bevat een record voor elke lees- of schrijfbeurtenis in een Unity Catalog-tabel of -pad. Dit omvat, maar is niet beperkt tot taakuitvoeringen, notebookuitvoeringen en dashboards die zijn bijgewerkt met de lees- of schrijfbeurtenis.

Kolomherkomsttabel

De kolomherkomsttabel bevat geen gebeurtenissen die geen bron hebben. Als u bijvoorbeeld invoegt in een kolom met expliciete waarden, wordt deze niet vastgelegd. Als u een kolom leest, wordt deze vastgelegd, ongeacht of u de uitvoer schrijft. Kolomherkomst wordt niet ondersteund voor Delta Live-tabellen.

Schema voor herkomstsysteemtabellen

De herkomstsysteemtabellen maken gebruik van het volgende schema. Het tabelherkomstschema bevat en source_column_nametarget_column_name.

Kolomnaam Gegevenstype Beschrijving Voorbeeld
account_id tekenreeks De id van het Azure Databricks-account. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id tekenreeks De id van de Unity Catalog-metastore. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id tekenreeks De id van de werkruimte 123456789012345
entity_type tekenreeks Het type entiteit waaruit de herkomsttransactie is vastgelegd. De waarde is NOTEBOOK, , PIPELINEJOB, , DBSQL_DASHBOARD, , DBSQL_QUERYOF NULL. NOTEBOOK
entity_id tekenreeks De id van de entiteit waaruit de herkomsttransactie is vastgelegd. Als entity_type dat het is, entity_id is NULLNULL. *Notebook: 23098402394234
*Baan: 23098402394234
* Databricks SQL-query: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Databricks SQL-dashboard: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Pijpleiding: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id tekenreeks Id voor het beschrijven van de unieke uitvoering van de entiteit, of NULL. Dit verschilt voor elk entiteitstype:

* Notitieblok: command_run_id
* Taak: job_run_id
* Databricks SQL-query: query_run_id
* Databricks SQL-dashboard: query_run_id
* Pijplijn: pipeline_update_id

Als entity_type dat het is, entity_run_id is NULLNULL.
*Notebook: 23098402394234
*Baan: 23098402394234
* Databricks SQL-query: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Databricks SQL-dashboard: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Pijpleiding: e9cd8a31-de2f-4206-adfa-4f6605d68d88
source_table_full_name tekenreeks Driedelige naam om de brontabel te identificeren. catalog.schema.table
source_table_catalog tekenreeks De catalogus van de brontabel. catalog
source_table_schema tekenreeks Het schema van de brontabel. catalog.schema
source_table_name tekenreeks De naam van de brontabel. table
source_path tekenreeks Locatie in cloudopslag van de brontabel of het pad als deze rechtstreeks vanuit de cloudopslag wordt gelezen. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type tekenreeks Het type bron. De waarde is TABLE, PATH, of VIEWSTREAMING_TABLE. TABLE
source_column_name tekenreeks De naam van de bronkolom. date
target_table_full_name tekenreeks Driedelige naam om de doeltabel te identificeren. catalog.schema.table
target_table_catalog tekenreeks De catalogus van de doeltabel. catalog
target_table_schema tekenreeks Het schema van de doeltabel. catalog.schema
target_table_name tekenreeks De naam van de doeltabel. table
target_path tekenreeks Locatie in cloudopslag van de doeltabel. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type tekenreeks Het type doel. De waarde is TABLE, PATH, of VIEWSTREAMING TABLE. TABLE
target_column_name tekenreeks De naam van de doelkolom. date
created_by tekenreeks De gebruiker die deze herkomst heeft gegenereerd. Dit kan een Azure Databricks-gebruikersnaam, een Azure Databricks-service-principal-id, 'Systeemgebruiker' of NULL als de gebruikersgegevens niet kunnen worden vastgelegd. crampton.rods@email.com
event_time timestamp De tijdstempel waarop de herkomst is gegenereerd. 2023-06-20T19:47:21.194+0000
event_date datum De datum waarop de herkomst is gegenereerd. Dit is een gepartitioneerde kolom. 2023-06-20

Systeemtabellen voor herkomst lezen

Let op de volgende overwegingen bij het analyseren van systeemtabellen voor herkomst:

  • entity_typeAzure Databricks biedt ondersteuning voor Delta Live Tables, notebooks, taken, Databricks SQL-query's en dashboards. Gebeurtenissen van andere entiteiten worden niet ondersteund.
  • Als u de entity_type functie nullziet, betekent dit dat er geen Azure Databricks-entiteit betrokken is bij de gebeurtenis. Dit kan bijvoorbeeld het resultaat zijn van een JDBC-query of van een gebruiker die op het tabblad Voorbeeldgegevens klikt in de gebruikersinterface van Azure Databricks.
  • Als u wilt bepalen of de gebeurtenis een lees- of schrijfbewerking is, kunt u het brontype en het doeltype bekijken.
    • Alleen-lezen: het brontype is niet null, maar het doeltype is null.
    • Alleen-schrijven: het doeltype is niet null, maar het brontype is null.
    • Lezen en schrijven: het brontype en het doeltype zijn niet null.

Voorbeeld van een herkomstsysteemtabel

Als voorbeeld van hoe herkomst wordt vastgelegd in systeemtabellen, volgt hier een voorbeeldquery gevolgd door de herkomstrecords die door de query worden gemaakt:

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

De record in system.access.table_lineage ziet er als volgt uit:

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

De record in system.access.column_lineage ziet er als volgt uit:

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

Notitie

Niet alle herkomstkolommen worden weergegeven in het bovenstaande voorbeeld. Zie het bovenstaande herkomstschema voor het volledige schema.

Problemen met externe tabelquery's oplossen

Wanneer u naar een externe tabel verwijst met behulp van het cloudopslagpad, bevat de bijbehorende herkomstrecord alleen de padnaam en niet de tabelnaam. De herkomstrecord voor deze query bevat bijvoorbeeld de padnaam en niet de tabelnaam:

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

Als u een query wilt uitvoeren op herkomstrecords voor een externe tabel waarnaar wordt verwezen op pad, moet u de query filteren met of source_pathtarget_path in plaats van source_table_full_name of target_table_full_name. Met de volgende query worden bijvoorbeeld alle herkomstrecords voor een externe tabel opgehaald:

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

Voorbeeld: Herkomstrecords ophalen op basis van de naam van de externe tabel

Als u het cloudopslagpad niet handmatig wilt ophalen om herkomst te vinden, kunt u de volgende functie gebruiken om herkomstgegevens op te halen met behulp van de tabelnaam. U kunt ook vervangen door system.access.table_lineagesystem.access.column_lineage in de functie als u een query wilt uitvoeren op kolomherkomst.

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

Gebruik vervolgens de volgende opdracht om de functie aan te roepen en herkomstrecords voor de externe tabel weer te geven:

display(getLineageForTable("table_name"))