共用方式為


監視 Delta Live Tables 資料管道

本文介紹如何使用 Delta Live Tables 流程的內建監控和可觀察性功能。 這些功能支援下列工作:

若要檢查和診斷查詢效能,請參閱 Delta Live Tables 管線存取查詢歷程記錄。 這項功能處於公開預覽狀態。

新增管線事件的電子郵件通知

您可以設定一或多個電子郵件地址,以在發生下列情況時接收通知:

  • 管線更新成功完成。
  • 管線更新失敗,發生可重試或無法重試的錯誤。 選取此選項可接收所有管線失敗的通知。
  • 管線更新失敗,並出現無法重試(嚴重)錯誤。 選取此選項,只有在發生無法重試的錯誤時,才會收到通知。
  • 單一資料流失敗。

若要在建立或編輯管線時設定電子郵件通知:

  1. 按下 [新增通知]
  2. 輸入一或多個電子郵件地址以接收通知。
  3. 按兩下每個通知類型的複選框,以傳送至已設定的電子郵件位址。
  4. 按下 [新增通知]

UI 中有哪些管線詳細資料可供使用?

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

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

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

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

如何檢視資料集詳細資料?

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

檢視更新歷程記錄

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

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

檢視串流指標

重要

Delta Live Tables 的串流監控能力目前在 公開預覽

您可以檢視 Spark 結構化串流所支持的數據源串流計量,例如 Apache Kafka、Amazon Kinesis、Auto Loader 和 Delta 數據表,適用於 Delta Live Tables 管線中的每個串流流程。 度量會顯示為 Delta Live Tables 使用者介面右側窗格中的圖表,並包括待處理秒數、待處理位元組、待處理紀錄和待處理檔案。 圖表會顯示依分鐘匯總的最大值,工具提示會在您將滑鼠停留在圖表上時顯示最大值。 數據限制在目前時間的過去 48 小時內。

當您在 UI 的 Graph 檢視中查看管線 DAG 時,管線中具有串流計量的數據表會顯示 Delta Live Tables 圖表圖示。 若要檢視串流指標,請點擊 [Delta Live Tables 圖表圖示],以在右窗格中的 [Flows] 索引卷標中顯示串流指標圖表。 您也可以套用篩選條件,只檢視具有串流計量的數據表,方法是按兩下 [List],然後按兩下 [具有串流計量

每個串流來源只支援特定的計量。 串流來源不支援的計量無法在UI中檢視。 下表顯示支援的串流來源可用的計量:

積壓位元組 待辦項目記錄 待辦專案秒數 待辦項目檔案
卡 夫 卡
動態
三角洲
自動載入器
Google Pub/Sub

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

Delta Live Tables 事件記錄檔包含與管線相關的所有資訊,包括稽核記錄、數據品質檢查、管線進度和數據歷程。 您可以使用事件記錄檔來追蹤、了解及監視資料管線的狀態。

您可以在 Delta Live Tables 使用者介面、Delta Live Tables API中檢視事件記錄檔專案,或直接查詢事件記錄檔。 本節著重於直接查詢事件記錄檔。

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

事件記錄架構

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

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

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

查詢事件記錄檔

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

Hive 中繼存放區

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

如果您尚未設定此 storage 設定,預設事件記錄檔位置為 DBFS 中的 /pipelines/<pipeline-id>/system/events。 例如,如果管線的識別碼為 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 Catalog,您必須使用 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 編輯器

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

注意

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

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

<pipeline-ID> 替換為 Delta Live Tables 管線的唯一標識碼。 您可以在 Delta Live Tables UI 的 [管線詳細資料] 面板中找到 ID。

管線執行的每個實例稱為 更新。 您通常會想要擷取最新更新的資訊。 執行下列查詢來尋找最新更新的標識符,並將它儲存在 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_definitiondetails: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
customers null
sales_orders_raw null
sales_orders_cleaned ["customers", "sales_orders_raw"]
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
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 Runtime 版本而定,待辦項目計量可能無法使用。

監視未啟用無伺服器之管線事件記錄檔中的增強式自動調整事件

對於不使用無伺服器計算的 DLT 管線,事件記錄檔會在管線中啟用增強式自動調整時擷取叢集大小。 包含增強式自動調整相關資訊的事件具有事件類型 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 流程

您可以使用 Delta Live Tables 事件日誌記錄和其他 Azure Databricks 審核日誌,完整了解在 Delta Live Tables 中數據如何被更新。

Delta Live Tables 會使用管線擁有者的認證來執行更新。 您可以藉由更新管線擁有者來變更所使用的憑證。 Delta Live Tables 會記錄使用者在管線上執行的動作,包括管線建立、設定的編輯,以及觸發更新。

如需 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
2021-05-20T19:36:03.517+0000 START user@company.com
2021-05-20T19:35:59.913+0000 CREATE user@company.com
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
11.0