監視差異即時資料表管線

本文說明如何使用 Delta Live Tables 管線的內建監視和可觀察性功能,包括數據歷程記錄、更新歷程記錄和數據質量報告。

您可以透過管線詳細資料UI手動檢閱大部分的監視數據。 查詢事件記錄檔元數據可更輕鬆地完成某些工作。 請參閱 什麼是 Delta Live Tables 事件記錄檔?

UI 中有哪些管線詳細數據可供使用?

管線圖形會在管線更新成功后立即顯示。 箭頭代表管線中數據集之間的相依性。 根據預設,管線詳細數據頁面會顯示數據表的最新更新,但您可以從下拉功能表中選取較舊的更新。

顯示的詳細數據包括管線標識碼、來源連結庫、計算成本、產品版本,以及針對管線設定的通道。

若要查看資料集的表格式檢視,請按兩下 [清單] 索引標籤。[清單] 檢視可讓您在管線中看到管線中以數據列表示的所有數據集,而且當您的管線 DAG 太大而無法以圖形檢視可視化時很有用。 您可以使用多個篩選來控制數據表中顯示的數據集,例如數據集名稱、類型和狀態。 若要切換回 DAG 視覺效果,請按兩下 [ 圖形]。

執行 身分 使用者是管線擁有者,而管線更新會以此用戶的許可權執行。 若要變更 run as 使用者,請按兩下 [ 許可權 ] 並變更管線擁有者。

如何檢視數據集詳細數據?

按兩下管線圖形或資料集清單中的數據集,會顯示資料集的詳細資料。 詳細數據報括數據集架構、數據品質計量,以及定義數據集的原始碼連結。

檢視更新歷程記錄

若要檢視管線更新的歷程記錄和狀態,請單擊頂端列中的 [更新歷程記錄] 下拉功能表。

若要檢視更新的圖形、詳細數據和事件,請在下拉功能表中選取更新。 若要返回最新的更新,請按兩下 [ 顯示最新的更新]。

取得管線事件的通知

若要接收管線事件的即時通知,例如管線更新成功完成或管線更新失敗,請在建立或編輯管線時,新增管線事件的電子郵件通知

什麼是 Delta Live Tables 事件記錄檔?

差異即時資料表事件記錄檔包含與管線相關的所有資訊,包括稽核記錄、資料品質檢查、管線進度和資料譜系。 您可以使用事件記錄檔來追蹤、了解及監視資料管線的狀態。

您可以在差異即時資料表使用者介面、差異即時資料表 API 中檢視事件記錄檔項目,或直接查詢事件記錄檔。 本節著重於直接查詢事件記錄檔。

您也可以定義自定義動作,以在記錄事件時執行,例如傳送具有事件攔截的警示

事件記錄檔架構

下表描述事件記錄檔架構。 其中有些欄位包含 JSON 數據,需要剖析才能執行某些查詢,例如 details 欄位。 Azure Databricks 支援 : 運算符來剖析 JSON 字段。 請參閱 : (冒號) 運算子

欄位 描述
id 事件記錄檔記錄的唯一標識符。
sequence JSON 檔,其中包含用來識別和排序事件的元數據。
origin JSON 檔,包含事件來源的元數據,例如雲端提供者、雲端提供者區域、、 或 ,以顯示管線的建立位置,或 DBSQLWORKSPACEpipeline_typepipeline_iduser_id
timestamp 記錄事件的時間。
message 描述事件的人類可讀取訊息。
level 事件類型,例如、INFOWARNERROR、 或 METRICS
error 如果發生錯誤,則描述錯誤的詳細數據。
details JSON 檔,其中包含事件的結構化詳細數據。 這是用來分析事件的主要欄位。
event_type 事件類型。
maturity_level 事件架構的穩定性。 可能的值是:

* STABLE:架構穩定且不會變更。
* NULL:架構穩定且不會變更。 如果記錄是在新增欄位之前建立的(2022.37 版)建立,maturity_level則此值可能是 NULL
* EVOLVING:架構不穩定且可能會變更。
* DEPRECATED:架構已被取代,Delta Live Tables 運行時間可能隨時停止產生此事件。

查詢事件記錄檔

事件記錄檔和查詢事件記錄檔的介面位置,取決於您的管線是否已設定為使用Hive中繼存放區或 Unity 目錄。

Hive 中繼存放區

如果您的管線 將數據表發佈至Hive中繼存放區,事件記錄檔會儲存在 /system/events 位置之下 storage 。 例如,如果您已將管線 storage 設定設定為 /Users/username/data,則事件記錄檔會儲存在 /Users/username/data/system/events DBFS 的路徑中。

如果您尚未設定此 storage 設定,預設事件記錄檔位置會 /pipelines/<pipeline-id>/system/events 位於 DBFS 中。 例如,如果管線的識別碼是 91de5e48-35ed-11ec-8d3d-0242ac130003,則儲存位置為 /pipelines/91de5e48-35ed-11ec-8d3d-0242ac130003/system/events

您可以建立檢視來簡化事件記錄檔的查詢。 下列範例會建立名為 event_log_raw的暫存檢視。 本文中包含的範例事件記錄查詢中會使用此檢視:

CREATE OR REPLACE TEMP VIEW event_log_raw AS SELECT * FROM delta.`<event-log-path>`;

將取代 <event-log-path> 為事件記錄檔位置。

管線執行的每個實例稱為 更新。 您通常會想要擷取最新更新的資訊。 執行下列查詢來尋找最新更新的標識碼,並將它儲存在暫存檢視中 latest_update_id 。 本文中包含的範例事件記錄查詢中會使用此檢視:

CREATE OR REPLACE TEMP VIEW latest_update AS SELECT origin.update_id AS id FROM event_log_raw WHERE event_type = 'create_update' ORDER BY timestamp DESC LIMIT 1;

您可以在 Azure Databricks 筆記本或 SQL 編輯器中查詢事件記錄檔。 使用筆記本或 SQL 編輯器來執行範例事件記錄檔查詢。

Unity 目錄

如果您的管線 將數據表發佈至 Unity 目錄,您必須使用 event_log資料表值函式 (TVF) 來擷取管線的事件記錄檔。 您可以將管線標識碼或數據表名稱傳遞至TVF,以擷取管線的事件記錄檔。 例如,若要擷取標識碼為 04c78631-3dd7-4856-b2a6-7d84e9b2638b之管線的事件記錄檔記錄:

SELECT * FROM event_log("04c78631-3dd7-4856-b2a6-7d84e9b2638b")

若要擷取建立或擁有數據表 my_catalog.my_schema.table1之管線的事件記錄檔記錄:

SELECT * FROM event_log(TABLE(my_catalog.my_schema.table1))

若要呼叫TVF,您必須使用共用叢集或 SQL 倉儲。 例如,您可以使用連結至共用叢集的筆記本,或使用連線至 SQL 倉儲的 SQL 編輯器

為了簡化管線的查詢事件,管線的擁有者可以透過TVF建立檢視 event_log 。 下列範例會針對管線建立事件記錄檔的檢視。 本文中包含的範例事件記錄查詢中會使用此檢視。

注意

event_log TVF 只能由管線擁有者呼叫,而且透過TVF建立的event_log檢視只能由管線擁有者查詢。 檢視無法與其他用戶共用。

CREATE VIEW event_log_raw AS SELECT * FROM event_log("<pipeline-ID>");

將取代 <pipeline-ID> 為 Delta Live Tables 管線的唯一標識碼。 您可以在 Delta Live Tables UI 的 [管線詳細數據 ] 面板中找到識別符。

管線執行的每個實例稱為 更新。 您通常會想要擷取最新更新的資訊。 執行下列查詢來尋找最新更新的標識碼,並將它儲存在暫存檢視中 latest_update_id 。 本文中包含的範例事件記錄查詢中會使用此檢視:

CREATE OR REPLACE TEMP VIEW latest_update AS SELECT origin.update_id AS id FROM event_log_raw WHERE event_type = 'create_update' ORDER BY timestamp DESC LIMIT 1;

從事件記錄檔查詢歷程資訊

包含譜系相關信息的事件具有事件類型 flow_definition。 物件 details:flow_definition 包含 output_datasetinput_datasets 定義圖形中的每個關聯性。

您可以使用下列查詢來擷取輸入和輸出資料集,以查看譜系資訊:

SELECT
  details:flow_definition.output_dataset as output_dataset,
  details:flow_definition.input_datasets as input_dataset
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'flow_definition'
  AND
  origin.update_id = latest_update.id
output_dataset input_datasets
1 customers null
2 sales_orders_raw null
3 sales_orders_cleaned ["customers", "sales_orders_raw"]
4 sales_order_in_la ["sales_orders_cleaned"]

從事件記錄檔查詢數據品質

如果您在管線中定義數據集的預期,數據品質計量會儲存在物件中 details:flow_progress.data_quality.expectations 。 包含資料品質相關資訊的事件具有事件類型 flow_progress。 下列範例會查詢上次管線更新的數據品質計量:

SELECT
  row_expectations.dataset as dataset,
  row_expectations.name as expectation,
  SUM(row_expectations.passed_records) as passing_records,
  SUM(row_expectations.failed_records) as failing_records
FROM
  (
    SELECT
      explode(
        from_json(
          details :flow_progress :data_quality :expectations,
          "array<struct<name: string, dataset: string, passed_records: int, failed_records: int>>"
        )
      ) row_expectations
    FROM
      event_log_raw,
      latest_update
    WHERE
      event_type = 'flow_progress'
      AND origin.update_id = latest_update.id
  )
GROUP BY
  row_expectations.dataset,
  row_expectations.name
dataset expectation passing_records failing_records
1 sales_orders_cleaned valid_order_number 4083 0

藉由查詢事件記錄檔來監視數據待辦專案

Delta Live Tables 會追蹤物件中待處理專案 details:flow_progress.metrics.backlog_bytes 中的數據量。 包含待辦項目計量的事件具有事件類型 flow_progress。 下列範例會查詢上次管線更新的待辦專案計量:

SELECT
  timestamp,
  Double(details :flow_progress.metrics.backlog_bytes) as backlog
FROM
  event_log_raw,
  latest_update
WHERE
  event_type ='flow_progress'
  AND
  origin.update_id = latest_update.id

注意

根據管線的數據源類型和 Databricks 執行時間版本而定,積存專案計量可能無法使用。

從事件記錄檔監視增強型自動調整事件

事件記錄檔會在管線中啟用增強式自動調整時擷取叢集大小。 包含增強式自動調整資訊的事件具有事件類型 autoscale。 叢集重設大小要求資訊會儲存在物件中 details:autoscale 。 下列範例會查詢上次管線更新的增強式自動調整叢集重設大小要求:

SELECT
  timestamp,
  Double(
    case
      when details :autoscale.status = 'RESIZING' then details :autoscale.requested_num_executors
      else null
    end
  ) as starting_num_executors,
  Double(
    case
      when details :autoscale.status = 'SUCCEEDED' then details :autoscale.requested_num_executors
      else null
    end
  ) as succeeded_num_executors,
  Double(
    case
      when details :autoscale.status = 'PARTIALLY_SUCCEEDED' then details :autoscale.requested_num_executors
      else null
    end
  ) as partially_succeeded_num_executors,
  Double(
    case
      when details :autoscale.status = 'FAILED' then details :autoscale.requested_num_executors
      else null
    end
  ) as failed_num_executors
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'autoscale'
  AND
  origin.update_id = latest_update.id

監視計算資源使用率

cluster_resources 事件會針對叢集中的工作位置數目、使用這些工作位置的數量,以及等候排程的工作數目提供計量。

開啟增強型自動調整時, cluster_resources 事件也會包含自動調整演算法的計量,包括 latest_requested_num_executorsoptimal_num_executors。 這些事件也會將演算法的狀態顯示為不同的狀態,例如 CLUSTER_AT_DESIRED_SIZESCALE_UP_IN_PROGRESS_WAITING_FOR_EXECUTORSBLOCKED_FROM_SCALING_DOWN_BY_CONFIGURATION。 這項資訊可以與自動調整事件一起檢視,以提供增強式自動調整的整體畫面。

下列範例會查詢上次管線更新的工作佇列大小歷程記錄:

SELECT
  timestamp,
  Double(details :cluster_resources.avg_num_queued_tasks) as queue_size
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'cluster_resources'
  AND
  origin.update_id = latest_update.id

下列範例會查詢上次管線更新的使用率歷程記錄:

SELECT
  timestamp,
  Double(details :cluster_resources.avg_task_slot_utilization) as utilization
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'cluster_resources'
  AND
  origin.update_id = latest_update.id

下列範例會查詢執行程式計數歷程記錄,以及僅適用於增強式自動調整管線的計量,包括最新要求中演算法所要求的執行程式數目、演算法根據最新計量所建議的最佳執行程式數目,以及自動調整演算法狀態:

SELECT
  timestamp,
  Double(details :cluster_resources.num_executors) as current_executors,
  Double(details :cluster_resources.latest_requested_num_executors) as latest_requested_num_executors,
  Double(details :cluster_resources.optimal_num_executors) as optimal_num_executors,
  details :cluster_resources.state as autoscaling_state
FROM
  event_log_raw,
  latest_update
WHERE
  event_type = 'cluster_resources'
  AND
  origin.update_id = latest_update.id

稽核 Delta Live Tables 管線

您可以使用差異即時資料表事件記錄和其他 Azure Databricks 稽核記錄來全面了解差異即時資料表中的資料更新方式。

差異即時資料表會使用管線擁有者的認證來執行更新。 您可以藉由更新管線擁有者來變更所使用的認證。 差異即時資料表會記錄使用者在管線上執行的動作,包括管線建立、設定的編輯,以及觸發更新。

如需 Unity 目錄稽核事件的參考,請參閱 Unity 目錄 事件。

查詢事件記錄檔中的使用者動作

您可以使用事件記錄檔來稽核事件,例如用戶動作。 包含使用者動作相關信息的事件具有事件類型 user_action

動作的相關信息會儲存在 user_action 欄位中的物件 details 中。 使用下列查詢來建構使用者事件的稽核記錄。 若要建立 event_log_raw 此查詢中使用的檢視,請參閱 查詢事件記錄檔。

SELECT timestamp, details:user_action:action, details:user_action:user_name FROM event_log_raw WHERE event_type = 'user_action'
timestamp action user_name
1 2021-05-20T19:36:03.517+0000 START user@company.com
2 2021-05-20T19:35:59.913+0000 CREATE user@company.com
3 2021-05-27T00:35:51.971+0000 START user@company.com

運行時間資訊

您可以檢視管線更新的執行時間資訊,例如更新的 Databricks Runtime 版本:

SELECT details:create_update:runtime_version:dbr_version FROM event_log_raw WHERE event_type = 'create_update'
dbr_version
1 11.0