Odniesienie do tabel systemowych powiązań
Ważne
Ta tabela systemowa znajduje się w publicznej wersji zapoznawczej. Aby uzyskać dostęp do tabeli, schemat musi być włączony w katalogu system
. Aby uzyskać więcej informacji, zobacz Włączanie schematów tabel systemowych.
Ten artykuł zawiera omówienie dwóch tabel systemowych pochodzenia. Te tabele systemowe bazują na funkcji pochodzenia danych Unity Catalog , co umożliwia programowe wykonywanie zapytań dotyczących pochodzenia danych, wspierając podejmowanie decyzji i sporządzanie raportów.
Uwaga
Obie tabele rodowodowe reprezentują podzbiór wszystkich zdarzeń odczytu/zapisu, ponieważ nie zawsze można uchwycić rodowód. Rekordy są emitowane tylko wtedy, gdy pochodzenie może zostać wywnioskowane.
Tabela pochodzenia tabel
Tabela systemu śledzenia pochodzenia tabeli zawiera rekord dla każdego zdarzenia odczytu lub zapisu w tabeli lub ścieżce katalogu Unity. To obejmuje, ale nie ogranicza się do uruchamiania zadań, uruchamiania notesów i pulpitów nawigacyjnych zaktualizowanych w wyniku zdarzenia odczytu lub zapisu.
ścieżka tabeli: ta tabela systemowa znajduje się w system.access.table_lineage
.
schemat pochodzenia tabel
Tabela systemu pochodzenia tabel używa następującego schematu.
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 metamagazynu Unity Catalog. | 5a31ba44-bbf4-4174-bf33-e1fa078e6765 |
workspace_id |
string | Identyfikator obszaru roboczego | 123456789012345 |
entity_type |
string | Typ jednostki, z której przechwycono transakcję pochodzenia. Wartość to NOTEBOOK , JOB , PIPELINE , DASHBOARD_V3 (Kokpit), DBSQL_DASHBOARD (Klasyczny kokpit), DBSQL_QUERY lub NULL . |
NOTEBOOK |
entity_id |
string | Identyfikator podmiotu, z którego przechwycono transakcję dotyczącą pochodzenia. Jeśli entity_type ma wartość NULL , entity_id jest NULL . |
|
entity_run_id |
string | ID opisujący unikatowy przebieg jednostki lub NULL . Różni się to dla każdego typu jednostki:
Jeśli entity_type ma wartość NULL , entity_run_id jest NULL . |
|
source_table_full_name |
string | Trzyczęściowa nazwa identyfikującą tabelę źródłową. | catalog.schema.table |
source_table_catalog |
string | Katalog tabeli źródłowej. | catalog |
source_table_schema |
string | Schemat tabeli źródłowej. | schema |
source_table_name |
łańcuch | Nazwa tabeli źródłowej. | table |
source_path |
string | Lokalizacja tabeli źródłowej w chmurze lub ścieżka, jeśli dane są odczytywane bezpośrednio z chmury. | abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1 |
source_type |
string | Typ źródła. Wartość to TABLE , PATH , VIEW , lub STREAMING_TABLE . |
TABLE |
target_table_full_name |
string | Trzyczęściowa nazwa identyfikująca tabelę docelową. | catalog.schema.table |
target_table_catalog |
string | Katalog tabeli docelowej. | catalog |
target_table_schema |
string | Schemat tabeli docelowej. | schema |
target_table_name |
string | Nazwa tabeli docelowej. | table |
target_path |
string | Lokalizacja tabeli docelowej w pamięci w chmurze. | abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1 |
target_type |
string | Typ obiektu docelowego. Wartość to TABLE , , PATH , VIEW lub STREAMING TABLE . |
TABLE |
created_by |
string | Użytkownik, który wygenerował ten rodowód. 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 |
znacznik czasu | Sygnatura czasowa, kiedy genealogia danych została wygenerowana. Informacje o strefie czasowej są rejestrowane na końcu wartości, gdzie +00:00 reprezentuje czas UTC. |
2023-06-20T19:47:21.194+00:00 |
event_date |
data | Data wygenerowania linii danych. Jest to kolumna partycjonowana. | 2023-06-20 |
Tabela pochodzenia kolumn
Tabela pochodzenia kolumn nie zawiera zdarzeń, które nie mają źródła. Na przykład, jeśli wstawisz jawne wartości do kolumny, nie zostanie to zapisane. Jeśli odczytujesz kolumnę, zostanie przechwycona niezależnie od tego, czy zapisujesz dane wyjściowe. Pochodzenie kolumn nie jest obsługiwane w przypadku biblioteki DLT.
ścieżka tabeli: ta tabela systemowa znajduje się w system.access.column_lineage
.
Schemat pochodzenia kolumn
Tabela systemu pochodzenia kolumn używa następującego schematu:
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 metamagazynu Unity Catalog. | 5a31ba44-bbf4-4174-bf33-e1fa078e6765 |
workspace_id |
string | Identyfikator obszaru roboczego | 123456789012345 |
entity_type |
string | Typ jednostki, z której przechwycono transakcję pochodzenia. Wartość to NOTEBOOK , JOB , PIPELINE , DASHBOARD_V3 (Pulpit nawigacyjny), DBSQL_DASHBOARD (Klasyczny pulpit nawigacyjny), DBSQL_QUERY lub NULL . |
NOTEBOOK |
entity_id |
string | Identyfikator podmiotu, z którego przechwycono transakcję liniową. Jeśli entity_type ma wartość NULL , entity_id jest NULL . |
|
entity_run_id |
string | Identyfikator (ID) opisujący unikatowy przebieg procesu jednostki lub NULL . Różni się to dla każdego typu jednostki:
Jeśli entity_type ma wartość NULL , entity_run_id jest NULL . |
|
source_table_full_name |
string | Trzyczęściowa nazwa identyfikującą tabelę źródłową. | catalog.schema.table |
source_table_catalog |
string | Katalog tabeli źródłowej. | catalog |
source_table_schema |
string | Schemat tabeli źródłowej. | schema |
source_table_name |
string | Nazwa tabeli źródłowej. | table |
source_path |
string | Lokalizacja tabeli źródłowej w chmurze lub ścieżka, jeśli dane są odczytywane bezpośrednio z chmury. | abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1 |
source_type |
sznurek | Typ źródła. Wartość to TABLE , PATH , VIEW , lub STREAMING_TABLE . |
TABLE |
source_column_name |
string | Nazwa kolumny źródłowej. | date |
target_table_full_name |
string | Trzyczęściowa nazwa identyfikująca tabelę docelową. | catalog.schema.table |
target_table_catalog |
string | Katalog tabeli docelowej. | catalog |
target_table_schema |
string | Schemat tabeli docelowej. | schema |
target_table_name |
string | Nazwa tabeli docelowej. | table |
target_path |
string | Lokalizacja tabeli docelowej w pamięci w chmurze. | abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1 |
target_type |
string | Typ obiektu docelowego. Wartość to TABLE , , PATH , VIEW lub STREAMING TABLE . |
TABLE |
target_column_name |
łańcuch | Nazwa kolumny docelowej. | date |
created_by |
string | Użytkownik, który wygenerował ten rodowód. 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 |
znacznik czasu | Znacznik czasu, kiedy linia pochodzenia danych została wygenerowana. Informacje o strefie czasowej są rejestrowane na końcu wartości, gdzie +00:00 reprezentuje czas UTC. |
2023-06-20T19:47:21.194+00:00 |
event_date |
data | Data wygenerowania rodowodu danych. Jest to kolumna partycjonowana. | 2023-06-20 |
Odczytywanie tabel systemowych genealogii
Podczas analizowania tabel systemowych pochodzenia należy zwrócić uwagę na następujące kwestie:
- W przypadku
entity_type
Azure Databricks obsługuje DLT, notesy, zadania, zapytania Databricks SQL i pulpity nawigacyjne. Zdarzenia z innych jednostek nie są obsługiwane. - Jeśli widzisz element
entity_type
jakonull
, 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 jest niezerowy, ale typ docelowy ma wartość null.
- Tylko do zapisu: 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 genealogicznego
Przykładem, jak rejestrowane jest pochodzenie w tabelach systemowych, jest przykładowe zapytanie, po którym następują rekordy pochodzenia tworzone 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. Aby uzyskać pełny schemat, zobacz powyższy schemat pochodzenia .
Rozwiązywanie problemów z zapytaniami tabel zewnętrznych
W przypadku odwołania się do tabeli zewnętrznej, korzystając ze ścieżki przechowywania w chmurze, skojarzony rekord pochodzenia danych 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 danych dotyczących pochodzenia dla zewnętrznej tabeli odwoływanej za pomocą ścieżki, powinieneś/powinnaś filtrować zapytanie, używając 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 rodowodowych na podstawie nazwy tabeli zewnętrznej
Jeśli nie chcesz ręcznie pobierać ścieżki do magazynu w chmurze, aby znaleźć linię, możesz użyć następującej funkcji, aby pobrać dane linii przy użyciu nazwy tabeli. Możesz również zastąpić system.access.table_lineage
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"))