Sdílet prostřednictvím


Referenční dokumentace systémových tabulek rodokmenu

Důležité

Tato funkce je ve verzi Public Preview.

Tento článek obsahuje přehled dvou systémových tabulek rodokmenu. Tyto systémové tabulky vycházejí z funkce rodokmenu dat v Unity Catalog, která umožňuje programově dotazovat data rodokmenu, aby se mohla rozhodovat o rozhodování a sestavách v Unity.

Existují dvě systémové tabulky rodokmenu:

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

Poznámka:

Obě tabulky rodokmenu představují podmnožinu všech událostí čtení a zápisu, protože není vždy možné zachytit rodokmen. Záznamy se generují pouze v případech, kdy je možné odvodit rodokmen.

Tabulka rodokmenu tabulky

Systémová tabulka rodokmenu tabulky obsahuje záznam pro každou událost čtení nebo zápisu v tabulce nebo cestě katalogu Unity. To zahrnuje mimo jiné spuštění úloh, spuštění poznámkového bloku a řídicí panely aktualizované událostí čtení nebo zápisu.

Tabulka rodokmenu sloupců

Tabulka rodokmenu sloupců neobsahuje události, které nemají zdroj. Pokud například vložíte do sloupce pomocí explicitních hodnot, nezachytí se. Pokud přečtete sloupec, zachytí se bez ohledu na to, jestli zapíšete výstup. Rodokmen sloupců není pro dynamické tabulky Delta podporován.

Schéma systémové tabulky rodokmenu

Systémové tabulky rodokmenu používají následující schéma. Schéma rodokmenu tabulky nezahrnuje source_column_name a target_column_name.

Název sloupce Datový typ Popis Příklad
account_id string ID účtu Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id string ID metastoru katalogu Unity. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id string ID pracovního prostoru 123456789012345
entity_type string Typ entity, ze které byla zachycena transakce rodokmenu. Hodnota je NOTEBOOK, , JOBPIPELINE, DBSQL_DASHBOARD, , DBSQL_QUERYNEBO NULL. NOTEBOOK
entity_id string ID entity, ze které byla zachycena transakce rodokmenu. Pokud entity_type je , entity_id je NULLNULL. * Poznámkový blok: 23098402394234
*Úlohy: 23098402394234
* Dotaz SQL databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Řídicí panel SQL Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Potrubí: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id string ID pro popis jedinečného spuštění entity nebo NULL. Liší se u každého typu entity:

* Poznámkový blok: command_run_id
* Úloha: job_run_id
* Dotaz SQL databricks: query_run_id
* Řídicí panel SQL Databricks: query_run_id
* Kanál: pipeline_update_id

Pokud entity_type je , entity_run_id je NULLNULL.
* Poznámkový blok: 23098402394234
*Úlohy: 23098402394234
* Dotaz SQL databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
* Řídicí panel SQL Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Potrubí: e9cd8a31-de2f-4206-adfa-4f6605d68d88
source_table_full_name string Název tří částí pro identifikaci zdrojové tabulky catalog.schema.table
source_table_catalog string Katalog zdrojové tabulky. catalog
source_table_schema string Schéma zdrojové tabulky catalog.schema
source_table_name string Název zdrojové tabulky. table
source_path string Umístění v cloudovém úložišti zdrojové tabulky nebo cesta, pokud se čte přímo z cloudového úložiště. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type string Typ zdroje. Hodnota je TABLE, , PATHVIEWnebo STREAMING_TABLE. TABLE
source_column_name string Název zdrojového sloupce. date
target_table_full_name string Třídílný název k identifikaci cílové tabulky catalog.schema.table
target_table_catalog string Katalog cílové tabulky. catalog
target_table_schema string Schéma cílové tabulky catalog.schema
target_table_name string Název cílové tabulky. table
target_path string Umístění v cloudovém úložišti cílové tabulky abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type string Typ cíle. Hodnota je TABLE, , PATHVIEWnebo STREAMING TABLE. TABLE
target_column_name string Název cílového sloupce date
created_by string Uživatel, který tento rodokmen vygeneroval. Může to být uživatelské jméno Azure Databricks, ID instančního objektu Azure Databricks, System-User nebo NULL pokud se informace o uživateli nedají zachytit. crampton.rods@email.com
event_time časové razítko Časové razítko při vygenerování rodokmenu. 2023-06-20T19:47:21.194+0000
event_date datum Datum vygenerování rodokmenu. Jedná se o dělený sloupec. 2023-06-20

Čtení systémových tabulek rodokmenu

Při analýze systémových tabulek rodokmenu si všimněte následujících aspektů:

  • entity_typeAzure Databricks podporuje tabulky Delta Live, poznámkové bloky, úlohy, dotazy SQL Databricks a řídicí panely. Události z jiných entit se nepodporují.
  • Pokud se zobrazí entity_type jako null, znamená to, že v události není zahrnuta žádná entita Azure Databricks. Může to být například výsledek dotazu JDBC nebo kliknutí na kartu Ukázková data v uživatelském rozhraní Azure Databricks.
  • Pokud chcete zjistit, jestli byla událost čtením nebo zápisem, můžete zobrazit typ zdroje a cílový typ.
    • Jen pro čtení: Typ zdroje není null, ale cílový typ má hodnotu null.
    • Pouze zápis: Cílový typ není null, ale zdrojový typ má hodnotu null.
    • Čtení a zápis: Typ zdroje a cílový typ nemají hodnotu null.

Příklad systémové tabulky rodokmenu

Jako příklad, jak se rodokmen zaznamenává v systémových tabulkách, tady je příklad dotazu následovaný záznamy rodokmenu, který dotaz vytvoří:

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

Záznam system.access.table_lineage by vypadal takto:

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

Záznam system.access.column_lineage by vypadal takto:

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

Poznámka:

V předchozím příkladu se nezobrazují všechny sloupce rodokmenu. Úplné schéma najdete ve výše uvedeném schématu rodokmenu.

Řešení potíží s dotazy na externí tabulky

Pokud odkazujete na externí tabulku pomocí cesty ke cloudovému úložišti, přidružený záznam rodokmenu obsahuje pouze název cesty, nikoli název tabulky. Záznam rodokmenu pro tento dotaz by například obsahoval název cesty, nikoli název tabulky:

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

Pokud se pokoušíte dotazovat záznamy rodokmenu pro externí tabulku odkazovanou cestou, budete muset dotaz filtrovat pomocí source_path nebo target_path místo source_table_full_name nebo target_table_full_name. Například následující dotaz načítá všechny záznamy rodokmenu pro externí tabulku:

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

Příklad: Načtení záznamů rodokmenu na základě názvu externí tabulky

Pokud nechcete ručně načíst cestu ke cloudovému úložišti a najít rodokmen, můžete pomocí následující funkce získat data rodokmenu pomocí názvu tabulky. Pokud chcete dotazovat rodokmen sloupců, můžete funkci nahradit system.access.table_lineagesystem.access.column_lineage také funkcí.

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

Pak pomocí následujícího příkazu volejte funkci a zobrazte záznamy rodokmenu pro externí tabulku:

display(getLineageForTable("table_name"))