Dela via


Referens för ursprungssystemtabeller

Viktigt!

Den här funktionen finns som allmänt tillgänglig förhandsversion.

Den här artikeln innehåller en översikt över de två ursprungssystemtabellerna. Dessa systemtabeller bygger på Unity Catalogs data härstamningsfunktion, så att du programmatiskt kan fråga ursprungsdata för att driva beslutsfattande och rapporter.

Det finns två ursprungssystemtabeller:

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

Kommentar

Båda ursprungstabellerna representerar en delmängd av alla läs-/skrivhändelser, eftersom det inte alltid är möjligt att avbilda ursprung. Poster genereras endast när ursprung kan härledas.

Tabellradtabell

Tabellens ursprungssystemtabell innehåller en post för varje läs- eller skrivhändelse i en Unity Catalog-tabell eller sökväg. Detta omfattar men är inte begränsat till jobbkörningar, notebook-körningar och instrumentpaneler som uppdateras med läs- eller skrivhändelsen.

Kolumn härkomsttabell

Kolumnens ursprungstabell innehåller inte händelser som inte har någon källa. Om du till exempel infogar i en kolumn med explicita värden hämtas den inte. Om du läser en kolumn registreras den oavsett om du skriver utdata eller inte. Kolumn härkomst stöds inte för Delta Live Tables.

Schema för ursprungssystemtabell

Systemtabellerna för ursprung använder följande schema. Tabellens ursprungsschema innehåller source_column_name inte och target_column_name.

Kolumnnamn Datatyp beskrivning Exempel
account_id sträng ID för Azure Databricks-kontot. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id sträng ID:t för Unity Catalog-metaarkivet. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id sträng Arbetsytans ID 123456789012345
entity_type sträng Typen av entitet som ursprungstransaktionen hämtades från. Värdet är NOTEBOOK, JOB, PIPELINE, DBSQL_DASHBOARD, DBSQL_QUERY, ELLER NULL. NOTEBOOK
entity_id sträng ID:t för entiteten som ursprungstransaktionen hämtades från. Om entity_type är NULL, entity_id är NULL. *Anteckningsboken: 23098402394234
*Jobb: 23098402394234
* Databricks SQL-fråga: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Databricks SQL-instrumentpanel: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Rörledning: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id sträng ID för att beskriva den unika körningen av entiteten, eller NULL. Detta skiljer sig åt för varje entitetstyp:

* Notebook: command_run_id
* Jobb: job_run_id
* Databricks SQL-fråga: query_run_id
* Databricks SQL-instrumentpanel: query_run_id
* Pipeline: pipeline_update_id

Om entity_type är NULL, entity_run_id är NULL.
*Anteckningsboken: 23098402394234
*Jobb: 23098402394234
* Databricks SQL-fråga: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Databricks SQL-instrumentpanel: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Rörledning: e9cd8a31-de2f-4206-adfa-4f6605d68d88
source_table_full_name sträng Namn i tre delar för att identifiera källtabellen. catalog.schema.table
source_table_catalog sträng Källtabellens katalog. catalog
source_table_schema sträng Schemat för källtabellen. catalog.schema
source_table_name sträng Namnet på källtabellen. table
source_path sträng Plats i molnlagringen av källtabellen eller sökvägen om den läser direkt från molnlagring. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type sträng Källans typ. Värdet är TABLE, PATH, VIEWeller STREAMING_TABLE. TABLE
source_column_name sträng Namnet på källkolumnen. date
target_table_full_name sträng Namn i tre delar för att identifiera måltabellen. catalog.schema.table
target_table_catalog sträng Katalogen för måltabellen. catalog
target_table_schema sträng Schemat för måltabellen. catalog.schema
target_table_name sträng Namnet på måltabellen. table
target_path sträng Plats i molnlagringen av måltabellen. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type sträng Typ av mål. Värdet är TABLE, PATH, VIEWeller STREAMING TABLE. TABLE
target_column_name sträng Namnet på målkolumnen. date
created_by sträng Den användare som genererade den här ursprunget. Detta kan vara ett Användarnamn för Azure Databricks, ett huvudnamn för Azure Databricks-tjänsten, "System-User" eller NULL om användarinformationen inte kan samlas in. crampton.rods@email.com
event_time timestamp Tidsstämpeln när ursprunget genererades. 2023-06-20T19:47:21.194+0000
event_date datum Datumet då ursprunget genererades. Det här är en partitionerad kolumn. 2023-06-20

Läsa systemtabeller för ursprung

Observera följande när du analyserar systemtabeller för ursprung:

  • entity_typeFör har Azure Databricks stöd för Delta Live Tables, notebook-filer, jobb, Databricks SQL-frågor och instrumentpaneler. Händelser från andra entiteter stöds inte.
  • Om du ser entity_type som nullbetyder det att ingen Azure Databricks-entitet är inblandad i händelsen. Det kan till exempel vara resultatet av en JDBC-fråga eller från en användare som klickar på fliken Exempeldata i Azure Databricks-användargränssnittet.
  • För att avgöra om händelsen var en läsning eller en skrivning kan du visa källtypen och måltypen.
    • Skrivskyddad: Källtypen är inte null, men måltypen är null.
    • Skrivskyddad: Måltypen är inte null, men källtypen är null.
    • Läs och skriv: Källtypen och måltypen är inte null.

Exempel på ursprungssystemtabell

Som ett exempel på hur ursprung registreras i systemtabeller är här en exempelfråga följt av de härstamningsposter som frågan skapar:

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

Posten i system.access.table_lineage skulle se ut så här:

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

Posten i system.access.column_lineage skulle se ut så här:

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

Kommentar

Alla ursprungskolumner visas inte i exemplet ovan. Det fullständiga schemat finns i ursprungsschemat ovan.

Felsöka externa tabellfrågor

När du refererar till en extern tabell med dess molnlagringssökväg innehåller den associerade ursprungsposten endast sökvägens namn och inte tabellnamnet. Till exempel skulle ursprungsposten för den här frågan innehålla sökvägens namn och inte tabellnamnet:

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

Om du försöker fråga efter ursprungsposter för en extern tabell som refereras av sökvägen måste du filtrera frågan med eller source_pathtarget_path i stället för source_table_full_name eller target_table_full_name. Följande fråga hämtar till exempel alla ursprungsposter för en extern tabell:

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

Exempel: Hämta ursprungsposter baserat på namnet på den externa tabellen

Om du inte vill hämta molnlagringssökvägen manuellt för att hitta ursprung kan du använda följande funktion för att hämta ursprungsdata med hjälp av tabellnamnet. Du kan också ersätta system.access.table_lineage med system.access.column_lineage i funktionen om du vill fråga efter kolumn härkomst.

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

Använd sedan följande kommando för att anropa funktionen och visa ursprungsposter för den externa tabellen:

display(getLineageForTable("table_name"))