分享方式:


監視差異即時資料表管線

本文說明使用 Delta Live Tables 管線的內建監視和可觀察性功能。 這些功能支援下列工作:

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

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

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

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

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

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

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

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

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

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

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

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

檢閱更新歷程記錄

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

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

什麼是差異即時資料表事件記錄檔?

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

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

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

事件記錄檔結構描述

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

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

- STABLE:結構描述穩定且不會變更。
- NULL:結構描述穩定且不會變更。 如果記錄是在新增 maturity_level 欄位 (2022.37 版) 之前建立的,則值可能是 NULL
- EVOLVING:結構描述不穩定且可能會變更。
- DEPRECATED:結構描述已被取代,差異即時資料表執行階段可能隨時停止產生此事件。

查詢事件記錄檔

事件記錄檔和查詢事件記錄檔的介面位置,取決於您的管線是否已設定為使用 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 目錄,您必須使用 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> 取代為差異即時資料表管線的唯一識別碼。 您可在差異即時資料表 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_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

藉由查詢事件記錄檔來監視資料待辦項目

差異即時資料表會追蹤 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

稽核差異即時資料表管線

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

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

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

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

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

動作的相關資訊會儲存在 details 欄位中的 user_action 物件中。 使用下列查詢以建構使用者事件的稽核記錄。 若要建立此查詢中使用的 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