Udostępnij za pośrednictwem


Informacje o tabelach systemowych pochodzenia

Ważne

Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

Ten artykuł zawiera omówienie dwóch tabel systemowych pochodzenia. Te tabele systemowe bazują na funkcji pochodzenia danych wykazu aparatu Unity, umożliwiając programowe wykonywanie zapytań dotyczących pochodzenia danych w celu napędzania podejmowania decyzji i raportów.

Istnieją dwie tabele systemowe pochodzenia:

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

Uwaga

Obie tabele pochodzenia reprezentują podzbiór wszystkich zdarzeń odczytu/zapisu, ponieważ nie zawsze jest możliwe przechwycenie pochodzenia danych. Rekordy są emitowane tylko wtedy, gdy pochodzenie może zostać wywnioskowane.

Tabela pochodzenia tabel

Tabela systemu pochodzenia tabel zawiera rekord dla każdego zdarzenia odczytu lub zapisu w tabeli lub ścieżce wykazu aparatu Unity. Dotyczy to również uruchamiania zadań, uruchamiania notesu i pulpitów nawigacyjnych zaktualizowanych przy użyciu zdarzenia odczytu lub zapisu.

Tabela pochodzenia kolumn

Tabela pochodzenia kolumn nie zawiera zdarzeń, które nie mają źródła. Jeśli na przykład wstawisz do kolumny przy użyciu jawnych wartości, nie zostanie przechwycony. Jeśli odczytujesz kolumnę, zostanie przechwycona niezależnie od tego, czy zapisujesz dane wyjściowe. Pochodzenie kolumn nie jest obsługiwane w przypadku tabel różnicowych na żywo.

Schemat tabeli systemu pochodzenia

Tabele systemowe pochodzenia używają następującego schematu. Schemat pochodzenia tabeli nie zawiera source_column_name elementu i target_column_name.

Nazwa kolumny Typ danych opis Przykład
account_id string Identyfikator konta usługi Azure Databricks. 7af234db-66d7-4db3-bbf0-956098224879
metastore_id string Identyfikator magazynu metadanych wykazu aparatu Unity. 5a31ba44-bbf4-4174-bf33-e1fa078e6765
workspace_id string Identyfikator obszaru roboczego 123456789012345
entity_type string Typ jednostki, z którego przechwycono transakcję pochodzenia. Wartość to NOTEBOOK, , JOB, PIPELINEDASHBOARD_V3 (Pulpit nawigacyjny), DBSQL_DASHBOARD (Starszy pulpit nawigacyjny), DBSQL_QUERY, LUB NULL. NOTEBOOK
entity_id string Identyfikator jednostki przechwycono transakcję pochodzenia. Jeśli entity_type parametr ma NULLwartość , entity_id to NULL. *Notes: 23098402394234
*Zadanie: 23098402394234
* Zapytanie SQL usługi Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Deska rozdzielcza: 01ef070d110715f2b6d3061b8bda89ea
* Starszy pulpit nawigacyjny: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Rurociąg: e9cd8a31-de2f-4206-adfa-4f6605d68d88
entity_run_id string Identyfikator opisujący unikatowy przebieg jednostki lub NULL. Różni się to dla każdego typu jednostki:

* Notes: command_run_id
* Zadanie: job_run_id
* Zapytanie SQL usługi Databricks: query_run_id
* Pulpit nawigacyjny: query_run_id
* Starszy pulpit nawigacyjny: query_run_id
* Potok: pipeline_update_id

Jeśli entity_type parametr ma NULLwartość , entity_run_id to NULL.
*Notes: e3cr5a10-de6f-6206-fdfa-4f5505d68d55
*Zadanie: 51090402394234
* Zapytanie SQL usługi Databricks: e9cd8a31-de2f-4206-adfa-4f6605d68d88
*Deska rozdzielcza: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
* Starszy pulpit nawigacyjny: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55
*Rurociąg: c5am1e0r-on2f-4206-adfa-4f6605d68d88
source_table_full_name string Trzyczęściowa nazwa identyfikującą tabelę źródłową. catalog.schema.table
source_table_catalog string Wykaz tabeli źródłowej. catalog
source_table_schema string Schemat tabeli źródłowej. catalog.schema
source_table_name string Nazwa tabeli źródłowej. table
source_path string Lokalizacja w magazynie w chmurze tabeli źródłowej lub ścieżka, jeśli jest odczytywana bezpośrednio z magazynu w chmurze. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
source_type string Typ źródła. Wartość to TABLE, , PATHVIEW, lub STREAMING_TABLE. TABLE
source_column_name string Nazwa kolumny źródłowej. date
target_table_full_name string Trzyczęściowa nazwa identyfikującą tabelę docelową. catalog.schema.table
target_table_catalog string Wykaz tabeli docelowej. catalog
target_table_schema string Schemat tabeli docelowej. catalog.schema
target_table_name string Nazwa tabeli docelowej. table
target_path string Lokalizacja w magazynie w chmurze tabeli docelowej. abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1
target_type string Typ obiektu docelowego. Wartość to TABLE, , PATH, VIEWlub STREAMING TABLE. TABLE
target_column_name string Nazwa kolumny docelowej. date
created_by string Użytkownik, który wygenerował ten pochodzenie. Może to być nazwa użytkownika usługi Azure Databricks, identyfikator jednostki usługi Azure Databricks, "System-User" lub NULL jeśli nie można przechwycić informacji o użytkowniku. crampton.rods@email.com
event_time timestamp Sygnatura czasowa generowania pochodzenia. 2023-06-20T19:47:21.194+0000
event_date data Data wygenerowania pochodzenia danych. Jest to kolumna partycjonowana. 2023-06-20

Odczytywanie tabel systemowych pochodzenia

Podczas analizowania tabel systemowych pochodzenia należy zwrócić uwagę na następujące kwestie:

  • W przypadku usługi entity_typeusługa Azure Databricks obsługuje tabele na żywo delty, notesy, zadania, zapytania SQL usługi Databricks i pulpity nawigacyjne. Zdarzenia z innych jednostek nie są obsługiwane.
  • Jeśli widzisz element entity_type jako null, oznacza to, że żadna jednostka usługi Azure Databricks nie jest zaangażowana w to zdarzenie. Może to być na przykład wynik zapytania JDBC lub kliknięcie przez użytkownika na karcie Przykładowe dane w interfejsie użytkownika usługi Azure Databricks.
  • Aby określić, czy zdarzenie było odczytem, czy zapisem, możesz wyświetlić typ źródła i typ docelowy.
    • Tylko do odczytu: typ źródła nie ma wartości null, ale typ docelowy ma wartość null.
    • Tylko zapis: typ docelowy nie ma wartości null, ale typ źródłowy ma wartość null.
    • Odczyt i zapis: typ źródła i typ docelowy nie mają wartości null.

Przykład tabeli systemu pochodzenia

Przykładem sposobu rejestrowania pochodzenia w tabelach systemowych jest przykładowe zapytanie, po którym następuje pochodzenie rekordów tworzonych przez zapytanie:

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

Rekord w pliku system.access.table_lineage będzie wyglądać następująco:

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

Rekord w pliku system.access.column_lineage będzie wyglądać następująco:

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

Uwaga

Nie wszystkie kolumny pochodzenia są wyświetlane w powyższym przykładzie. Pełny schemat można znaleźć w powyższym schemacie pochodzenia.

Rozwiązywanie problemów z zapytaniami tabel zewnętrznych

W przypadku odwołowania się do tabeli zewnętrznej przy użyciu ścieżki magazynu w chmurze skojarzony rekord pochodzenia zawiera tylko nazwę ścieżki, a nie nazwę tabeli. Na przykład rekord pochodzenia dla tego zapytania będzie zawierać nazwę ścieżki, a nie nazwę tabeli:

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

Jeśli próbujesz wykonać zapytanie dotyczące rekordów pochodzenia dla tabeli zewnętrznej, do której odwołuje się ścieżka, należy filtrować zapytanie przy użyciu polecenia source_path lub target_path zamiast source_table_full_name lub target_table_full_name. Na przykład następujące zapytanie ściąga wszystkie rekordy pochodzenia dla tabeli zewnętrznej:

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

Przykład: pobieranie rekordów pochodzenia na podstawie nazwy tabeli zewnętrznej

Jeśli nie chcesz ręcznie pobierać ścieżki magazynu w chmurze w celu znalezienia pochodzenia danych, możesz użyć następującej funkcji, aby pobrać dane pochodzenia przy użyciu nazwy tabeli. Możesz również zastąpić system.access.table_lineage ciąg ciągiem system.access.column_lineage w funkcji, jeśli chcesz wykonać zapytanie dotyczące pochodzenia kolumn.

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

Następnie użyj następującego polecenia, aby wywołać funkcję i wyświetlić rekordy pochodzenia dla tabeli zewnętrznej:

display(getLineageForTable("table_name"))