譜系系統 tables 參考資料
重要
此系統 table 處於公開預覽 。 若要存取 table,您必須在 system
catalog中啟用 schema。 如需詳細資訊,請參閱 啟用系統 table 架構。
本文提供了針對兩個譜系系統 tables的概述。 這些系統 tables 是建立在 Unity Catalog的 數據譜系功能上,讓您能以程式方式查詢譜系數據,用於決策制定和報告生成。
注意
這兩個譜系 tables 都代表所有讀取/寫入事件的子集,因為擷取譜系並不總是可能的。 只有在可推斷譜系時,才會發出記錄。
Table 譜系 table
table 譜系系統 table 包含 Unity Catalogtable 或路徑上每個讀取或寫入事件的記錄。 這包括但不限於作業執行、筆記本執行,以及使用讀取或寫入事件更新的儀表板。
Table 路徑:此系統 table 位於 system.access.table_lineage
。
Table 譜系 schema
table 系譜系統 table 使用以下 schema。
Column 名稱 | 資料類型 | 描述 | 範例 |
---|---|---|---|
account_id |
字串 | Azure Databricks 帳戶的識別碼。 | 7af234db-66d7-4db3-bbf0-956098224879 |
metastore_id |
字串 | Unity Catalog 中繼存放區的識別碼。 | 5a31ba44-bbf4-4174-bf33-e1fa078e6765 |
workspace_id |
字串 | 工作區的識別碼 | 123456789012345 |
entity_type |
字串 | 從中擷取譜系交易的實體類型。 值為 NOTEBOOK 、JOB 、PIPELINE 、DASHBOARD_V3 (儀表板)、DBSQL_DASHBOARD (舊版儀表板)、DBSQL_QUERY 或 NULL 。 |
NOTEBOOK |
entity_id |
字串 | 從中擷取譜系交易之實體的識別碼。 如果 entity_type 為 NULL ,則 entity_id 為 NULL 。 |
- 筆記本:23098402394234 - 作業: 23098402394234 - Databricks SQL 查詢: e9cd8a31-de2f-4206-adfa-4f6605d68d88 - 儀表板: 01ef070d110715f2b6d3061b8bda89ea - 舊版儀表板: e9cd8a31-de2f-4206-adfa-4f6605d68d88 - 管線: e9cd8a31-de2f-4206-adfa-4f6605d68d88 |
entity_run_id |
字串 | 描述實體的唯一執行識別碼,或 NULL 。 每種實體類型都有所不同:- 筆記本:command_run_id - 作業:job_run_id - Databricks SQL 查詢:query_run_id - 儀表板:query_run_id - 舊版儀表板:query_run_id - 管線:pipeline_update_id 如果 entity_type 為 NULL ,則 entity_run_id 為 NULL 。 |
- 筆記本:e3cr5a10-de6f-6206-fdfa-4f5505d68d55 - 作業: 51090402394234 - Databricks SQL 查詢: e9cd8a31-de2f-4206-adfa-4f6605d68d88 - 儀表板: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55 - 舊版儀表板: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55 - 管線: c5am1e0r-on2f-4206-adfa-4f6605d68d88 |
source_table_full_name |
字串 | 識別來源 table的三部分名稱。 | catalog.schema.table |
source_table_catalog |
字串 | 來源 table的 catalog。 | catalog |
source_table_schema |
字串 | 來源 table的 schema。 | schema |
source_table_name |
字串 | 來源的名稱 table。 | table |
source_path |
字串 | 來源的雲端記憶體位置 table,或直接從雲端記憶體讀取路徑。 | abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1 |
source_type |
字串 | 來源的類型。 該值為 TABLE 、PATH 、VIEW 或 STREAMING_TABLE 。 |
TABLE |
target_table_full_name |
字串 | 識別目標 table的由三個部分組成的名稱。 | catalog.schema.table |
target_table_catalog |
字串 | 目標 table的 catalog。 | catalog |
target_table_schema |
字串 | 目標 table的 schema。 | schema |
target_table_name |
字串 | 目標的名稱 table。 | table |
target_path |
字串 | 目標雲端記憶體中的位置 table。 | abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1 |
target_type |
字串 | 目標的類型。 該值為 TABLE 、PATH 、VIEW 或 STREAMING TABLE 。 |
TABLE |
created_by |
字串 | 產生此譜系的使用者。 這可以是 Azure Databricks 使用者名稱、Azure Databricks 服務主體識別碼「System-User」,或 NULL (無法擷取使用者資訊)。 |
crampton.rods@email.com |
event_time |
timestamp | 產生譜系時的時間戳記。
Timezone 信息會記錄在值結尾,+00:00 代表 UTC。 |
2023-06-20T19:47:21.194+00:00 |
event_date |
date | 產生譜系的日期。 這是被分割的 column。 | 2023-06-20 |
Column 譜系 table
column 譜系 table 不包含沒有來源的事件。 例如,如果您使用明確的 values將 insert 轉換為 column,則不會被擷取。 如果您讀取 column,無論您是否將輸出寫入,系統都會擷取。 Delta Live Tables不支援 Column 譜系。
Table 路徑:此系統 table 位於 system.access.column_lineage
。
Column 譜系 schema
column 譜系系統 table 使用下列的 schema:
Column 名稱 | 資料類型 | 描述 | 範例 |
---|---|---|---|
account_id |
字串 | Azure Databricks 帳戶的識別碼。 | 7af234db-66d7-4db3-bbf0-956098224879 |
metastore_id |
字串 | Unity Catalog 中繼資料儲存庫的標識符。 | 5a31ba44-bbf4-4174-bf33-e1fa078e6765 |
workspace_id |
字串 | 工作區的識別碼 | 123456789012345 |
entity_type |
字串 | 從中擷取譜系交易的實體類型。 值為 NOTEBOOK 、JOB 、PIPELINE 、DASHBOARD_V3 (儀表板)、DBSQL_DASHBOARD (舊版儀表板)、DBSQL_QUERY 或 NULL 。 |
NOTEBOOK |
entity_id |
字串 | 從中擷取譜系交易之實體的識別碼。 如果 entity_type 為 NULL ,則 entity_id 為 NULL 。 |
- 筆記本:23098402394234 - 作業: 23098402394234 - Databricks SQL 查詢: e9cd8a31-de2f-4206-adfa-4f6605d68d88 - 儀表板: 01ef070d110715f2b6d3061b8bda89ea - 舊版儀表板: e9cd8a31-de2f-4206-adfa-4f6605d68d88 - 管線: e9cd8a31-de2f-4206-adfa-4f6605d68d88 |
entity_run_id |
字串 | 描述實體的唯一執行識別碼,或 NULL 。 每種實體類型都有所不同:- 筆記本:command_run_id - 作業:job_run_id - Databricks SQL 查詢:query_run_id - 儀表板:query_run_id - 舊版儀表板:query_run_id - 管線:pipeline_update_id 如果 entity_type 為 NULL ,則 entity_run_id 為 NULL 。 |
- 筆記本:e3cr5a10-de6f-6206-fdfa-4f5505d68d55 - 作業: 51090402394234 - Databricks SQL 查詢: e9cd8a31-de2f-4206-adfa-4f6605d68d88 - 儀表板: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55 - 舊版儀表板: c3ra5m10-pt6o-6206-mdfa-4f5505d68d55 - 管線: c5am1e0r-on2f-4206-adfa-4f6605d68d88 |
source_table_full_name |
字串 | 用於識別來源的三部分名稱 table。 | catalog.schema.table |
source_table_catalog |
字串 | 來源 table的 catalog。 | catalog |
source_table_schema |
字串 | 來源 table的 schema。 | schema |
source_table_name |
字串 | 來源的名稱 table。 | table |
source_path |
字串 | 來源在雲端儲存的檔案位置 table,或從雲端儲存中直接讀取的路徑。 | abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1 |
source_type |
字串 | 來源的類型。 該值為 TABLE 、PATH 、VIEW 或 STREAMING_TABLE 。 |
TABLE |
source_column_name |
字串 | 來源的名稱 column。 | date |
target_table_full_name |
字串 | 用來識別目標 table的三部分名稱。 | catalog.schema.table |
target_table_catalog |
字串 | 目標 table的 catalog。 | catalog |
target_table_schema |
字串 | 目標 table的 schema。 | schema |
target_table_name |
字串 | 目標的名稱 table。 | table |
target_path |
字串 | 目標雲端記憶體中的位置 table。 | abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1 |
target_type |
字串 | 目標的類型。 該值為 TABLE 、PATH 、VIEW 或 STREAMING TABLE 。 |
TABLE |
target_column_name |
字串 | 目標名稱為 column。 | date |
created_by |
字串 | 產生此譜系的使用者。 這可以是 Azure Databricks 使用者名稱、Azure Databricks 服務主體識別碼「System-User」,或 NULL (無法擷取使用者資訊)。 |
crampton.rods@email.com |
event_time |
timestamp | 產生譜系時的時間戳記。
Timezone 信息會記錄在值結尾,+00:00 代表 UTC。 |
2023-06-20T19:47:21.194+00:00 |
event_date |
date | 產生譜系的日期。 這是一個分割區塊 column。 | 2023-06-20 |
譜系讀取系統 tables
在分析譜系系統 tables時,請注意下列考慮:
- 針對
entity_type
,Azure Databricks 支援 Delta Live Tables、筆記本、作業、Databricks SQL 查詢和儀錶板。 不支援來自其他實體的事件。 - 如果您將
entity_type
視為null
,表示事件中未涉及任何 Azure Databricks 實體。 例如,可能是 JDBC 查詢的結果,或使用者按下 Azure Databricks UI 中的 [範例資料] 索引標籤。 - 若要判斷事件是讀取還是寫入,可檢視來源類型和目標類型。
- 唯讀:來源類型並非 Null,但目標類型為 Null。
- 唯寫:目標類型並非 Null,但來源類型為 Null。
- 讀取和寫入:來源類型和目標類型都不是 Null。
譜系系統 table 範例
在系統 tables中記錄譜系的一個範例中,這是一個範例查詢,後面接著查詢所建立的譜系記錄:
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);
system.access.table_lineage
中的記錄看起來就像:
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 |
system.access.column_lineage
中的記錄看起來就像:
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 |
注意
並未在上述範例中顯示所有 columns 譜系。 如需完整的 schema,請參閱上述 譜系 schema。
針對外部 table 查詢進行疑難解答
當您以雲端儲存路徑作為外部 table 的參考時,相關的譜系記錄只會包含路徑名稱,而不包含 table 名稱。 例如,此查詢的歷程記錄會包含路徑名稱,而不是 table 名稱:
SELECT * FROM delta.`abfss://my-container-name@storage-account-name.dfs.core.windows.net/table1`;
如果您試著查詢路徑所參考的外部 table 歷程記錄,則必須使用 source_path
或 target_path
來篩選查詢,而不是使用 source_table_full_name
或 target_table_full_name
。 例如,下列查詢會提取外部 table的所有歷程記錄:
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";
範例:根據外部 table 名稱擷取歷程記錄
如果您不想手動獲取雲端儲存路徑以尋找譜系,您可以使用下列函式,以 table 名稱來 get 譜系數據。 如果您想要查詢 column 譜系,也可以使用 函式中的 system.access.column_lineage
取代 system.access.table_lineage
。
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)
)
然後使用下列命令來呼叫函數,並顯示 table的外部歷程記錄:
display(getLineageForTable("table_name"))