Note
lakeflow 架構先前稱為 workflow。 這兩個架構的內容都相同。
本文是系統數據表的 lakeflow 參考,可記錄您帳戶中的作業活動。 這些數據表包含您帳戶中部署於相同雲端區域之所有工作區的記錄。 若要查看來自另一個區域的記錄,您必須從部署於該區域的工作區檢視數據表。
Requirements
- 若要存取這些系統數據表,用戶必須:
- 同時為中繼存放區管理員和帳戶管理員,或
- 具有系統架構的
USE和SELECT許可權。 請參閱 授與系統資料表的存取權。
可用的作業數據表
所有作業相關的系統數據表都存在於架構中 system.lakeflow 。 目前,架構會裝載四個數據表:
| Table | Description | 支持流媒體 | 免費保留期間 | 包含全域或區域數據 |
|---|---|---|---|---|
| 職位 (公開預覽版) | 追蹤帳戶中建立的所有工作 | Yes | 365 天 | Regional |
| job_tasks (公開預覽版) | 追蹤在帳戶中執行的所有作業工作 | Yes | 365 天 | Regional |
| job_run_timeline (公開預覽版) | 追蹤作業的執行情況和相關的元數據 | Yes | 365 天 | Regional |
| job_task_run_timeline (公開預覽版) | 記錄工作執行和相關元數據 | Yes | 365 天 | Regional |
| 管線 (公開預覽) | 追蹤在帳戶中建立的所有管線 | Yes | 365 天 | Regional |
| pipeline_update_timeline (公開預覽版) | 追蹤工作流程更新及相關元資料 | Yes | 365 天 | Regional |
詳細的架構參考
下列各節提供每個作業相關系統數據表的架構參考。
作業數據表架構
jobs 數據表是緩時變維度數據表 (SCD2)。 當數據列變更時,會發出新的數據列,以邏輯方式取代前一個數據列。
表格路徑: system.lakeflow.jobs
| 欄位名稱 | 數據類型 | Description | Notes |
|---|---|---|---|
account_id |
字串 | 此作業所屬帳號的ID | |
workspace_id |
字串 | 此作業所屬工作區的ID | |
job_id |
字串 | 工作的識別碼 | 僅在單一工作區內具有唯一性 |
name |
字串 | 使用者提供的工作名稱 | |
description |
字串 | 使用者提供的工作描述 | 如果您已設定 客戶管理的金鑰 ,則此欄位為空。 |
creator_id |
字串 | 創建這項工作的負責人ID | |
tags |
地圖 | 與此作業相關聯的使用者提供自定義標籤 | |
change_time |
時間戳記 | 上次修改作業的時間 | 時區記錄為 +00:00 (UTC) |
delete_time |
時間戳記 | 使用者刪除作業的時間 | 時區記錄為 +00:00 (UTC) |
run_as |
字串 | 使用者或服務主體的 ID,其權限用於管線更新 | |
trigger |
結構 | 任務的觸發設定 | 2025 年 12 月初之前已發出的列未被填入 |
trigger_type |
字串 | 這份工作的觸發點類型 | 2025 年 12 月初之前已發出的列未被填入 |
run_as_user_name |
字串 | 使用者的電子郵件地址或作業執行時所用權限的服務主體 ID | 2025 年 12 月初之前已發出的列未被填入 |
creator_user_name |
字串 | 使用者的電子郵件或創建該工作的服務主體的 ID | 2025 年 12 月初之前已發出的列未被填入 |
paused |
布爾值 | 表示工作是否暫停 | 2025 年 12 月初之前已發出的列未被填入 |
timeout_seconds |
long | 作業的超時時間以秒數計算 | 2025 年 12 月初之前已發出的列未被填入 |
health_rules |
陣列 | 為此工作定義的健康規則集合 | 2025 年 12 月初之前已發出的列未被填入 |
deployment |
結構 | 由外部來源管理之作業的部署資訊 | 2025 年 12 月初之前已發出的列未被填入 |
create_time |
時間戳記 | 這個職位創立的時間點。 時區記錄為 +00:00(UTC)。 | 2025 年 12 月初之前已發出的列未被填入 |
範例查詢
-- Get the most recent version of a job
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
system.lakeflow.jobs QUALIFY rn=1
作業工作數據表架構
工作任務表是緩慢變化維度表(SCD2)。 當數據列變更時,會發出新的數據列,以邏輯方式取代前一個數據列。
表格路徑: system.lakeflow.job_tasks
| 欄位名稱 | 數據類型 | Description | Notes |
|---|---|---|---|
account_id |
字串 | 此作業所屬帳號的ID | |
workspace_id |
字串 | 此作業所屬工作區的ID | |
job_id |
字串 | 工作的識別碼 | 僅在單一工作區內具有唯一性 |
task_key |
字串 | 工作中任務的參考指標 | 僅在單一作業中唯一存在 |
depends_on_keys |
陣列 | 此任務所有上游依賴的任務鍵 | |
change_time |
時間戳記 | 上次修改任務的時間 | 時區記錄為 +00:00 (UTC) |
delete_time |
時間戳記 | 用戶刪除工作的時間 | 時區記錄為 +00:00 (UTC) |
timeout_seconds |
long | 任務的超時時間以秒數計算 | 2025 年 12 月初之前已發出的列未被填入 |
health_rules |
陣列 | 為此工作任務定義的健康規則集合 | 2025 年 12 月初之前已發出的列未被填入 |
範例查詢
-- Get the most recent version of a job task
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
system.lakeflow.job_tasks QUALIFY rn=1
作業執行時程表數據表架構
作業執行時間軸數據表在產生時是不可變且完成的。
表格路徑: system.lakeflow.job_run_timeline
| 欄位名稱 | 數據類型 | Description | Notes |
|---|---|---|---|
account_id |
字串 | 此作業所屬帳號的ID | |
workspace_id |
字串 | 此作業所屬工作區的ID | |
job_id |
字串 | 工作的識別碼 | 此金鑰只在單一工作區內是唯一的 |
run_id |
字串 | 作業執行的識別碼 | |
period_start_time |
時間戳記 | 跑步或時間段的開始時間 | 時區資訊記錄在數值的末尾,其中 +00:00 代表 UTC。 如需了解 Databricks 如何將長時間運行劃分為每小時間隔的詳細資訊,請參閱 時間線切割邏輯。 |
period_end_time |
時間戳記 | 運行結束時間或時間週期結束時間 | 時區資訊記錄在數值的末尾,其中 +00:00 代表 UTC。 如需了解 Databricks 如何將長時間運行劃分為每小時間隔的詳細資訊,請參閱 時間線切割邏輯。 |
trigger_type |
字串 | 可以觸發執行的觸發器類型 | 如需可能的值,請參閱 觸發類型值 |
run_type |
字串 | 作業執行的類型 | 如需可能的值,請參閱 執行類型值 |
run_name |
字串 | 與此作業執行相關聯的用戶指定的執行名稱 | |
compute_ids |
陣列 | 陣列包含父作業執行批次的計算識別碼 | 用於識別執行類型所使用的 WORKFLOW_RUN 作業叢集。 如需其他計算資訊,請參閱 job_task_run_timeline 數據表。 |
result_state |
字串 | 作業執行的結果 | 對於持續超過一小時且跨越多行的跑程,此欄僅在代表跑程結束的那一行中填入。 如需可能的值,請參閱 結果狀態值。 |
termination_code |
字串 | 作業執行的終止碼 | 對於持續超過一小時且跨越多行的跑程,此欄僅在代表跑程結束的那一行中填入。 如需可能的值,請參閱 終止程式代碼值。 |
job_parameters |
地圖 | 作業執行中使用的作業層級參數 | 僅包含 job_parameters的數值。 已棄用的參數欄位(notebook_params, , python_paramspython_named_params, spark_submit_paramssql_params及)未包含在內。 |
source_task_run_id |
字串 | 來源任務執行的 ID。 請使用此欄來識別是哪個任務執行觸發了這次工作執行。 | 2025 年 12 月初之前已發出的列未被填入 |
root_task_run_id |
字串 | 執行根任務的 ID。 請使用此欄來識別是哪個任務執行觸發了這次工作執行。 | 2025 年 12 月初之前已發出的列未被填入 |
compute |
陣列 | 關於工作執行中使用的運算資源細節 | 2025 年 12 月初之前已發出的列未被填入 |
termination_type |
字串 | 任務執行的終止類型 | 2025 年 12 月初之前已發出的列未被填入 |
setup_duration_seconds |
long | 該工作設定階段的持續時間以秒數計 | 2025 年 12 月初之前已發出的列未被填入 |
queue_duration_seconds |
long | 任務執行在佇列中所花費的時間,以秒為單位計算。 | 2025 年 12 月初之前已發出的列未被填入 |
run_duration_seconds |
long | 該工作總時長以秒數計 | 2025 年 12 月初之前已發出的列未被填入 |
cleanup_duration_seconds |
long | 作業清理階段的持續時間以秒數計 | 2025 年 12 月初之前已發出的列未被填入 |
execution_duration_seconds |
long | 該工作執行階段的持續時間以秒數計 | 2025 年 12 月初之前已發出的列未被填入 |
範例查詢
-- This query gets the daily job count for a workspace for the last 7 days:
SELECT
workspace_id,
COUNT(DISTINCT run_id) as job_count,
to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL
-- This query returns the daily job count for a workspace for the last 7 days, distributed by the outcome of the job run.
SELECT
workspace_id,
COUNT(DISTINCT run_id) as job_count,
result_state,
to_date(period_start_time) as date
FROM system.lakeflow.job_run_timeline
WHERE
period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
AND result_state IS NOT NULL
GROUP BY ALL
-- This query returns the average time of job runs, measured in seconds. The records are organized by job. A top 90 and a 95 percentile column show the average lengths of the job's longest runs.
with job_run_duration as (
SELECT
workspace_id,
job_id,
run_id,
CAST(SUM(period_end_time - period_start_time) AS LONG) as duration
FROM
system.lakeflow.job_run_timeline
WHERE
period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL
)
SELECT
t1.workspace_id,
t1.job_id,
COUNT(DISTINCT t1.run_id) as runs,
MEAN(t1.duration) as mean_seconds,
AVG(t1.duration) as avg_seconds,
PERCENTILE(t1.duration, 0.9) as p90_seconds,
PERCENTILE(t1.duration, 0.95) as p95_seconds
FROM
job_run_duration t1
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100
-- This query provides a historical runtime for a specific job based on the `run_name` parameter. For the query to work, you must set the `run_name`.
SELECT
workspace_id,
run_id,
SUM(period_end_time - period_start_time) as run_time
FROM system.lakeflow.job_run_timeline
WHERE
run_type="SUBMIT_RUN"
AND run_name = :run_name
AND period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
GROUP BY ALL
-- This query collects a list of retried job runs with the number of retries for each run.
with repaired_runs as (
SELECT
workspace_id, job_id, run_id, COUNT(*) - 1 as retries_count
FROM system.lakeflow.job_run_timeline
WHERE result_state IS NOT NULL
GROUP BY ALL
HAVING retries_count > 0
)
SELECT
*
FROM repaired_runs
ORDER BY retries_count DESC
LIMIT 10;
作業工作執行時程表數據表架構
作業工作執行時程表數據表在產生時是不可變且完成的。
表格路徑: system.lakeflow.job_task_run_timeline
| 欄位名稱 | 數據類型 | Description | Notes |
|---|---|---|---|
account_id |
字串 | 此作業所屬帳號的ID | |
workspace_id |
字串 | 此作業所屬工作區的ID | |
job_id |
字串 | 工作的識別碼 | 僅在單一工作區內具有唯一性 |
run_id |
字串 | 任務執行的識別碼 | |
job_run_id |
字串 | 作業執行的識別碼 | |
parent_run_id |
字串 | 親執行的識別碼 | |
period_start_time |
時間戳記 | 任務的開始時間或時間週期 | 時區資訊記錄在數值的末尾,其中 +00:00 代表 UTC。 如需了解 Databricks 如何將長時間運行劃分為每小時間隔的詳細資訊,請參閱 時間線切割邏輯。 |
period_end_time |
時間戳記 | 任務的結束時間,或時間週期的結束時間 | 時區資訊記錄在數值的末尾,其中 +00:00 代表 UTC。 如需了解 Databricks 如何將長時間運行劃分為每小時間隔的詳細資訊,請參閱 時間線切割邏輯。 |
task_key |
字串 | 工作中任務的參考指標 | 此金鑰在單一作業中是唯一的 |
compute_ids |
陣列 | compute_ids陣列包含作業工作所使用的作業叢集、互動式叢集和SQL倉儲標識碼 | |
result_state |
字串 | 作業工作執行的結果 | 對於執行時間超過一小時且跨多個行的任務,此欄位只會在表示執行結束的行中填入。 如需可能的值,請參閱 結果狀態值。 |
termination_code |
字串 | 工作執行的終止碼 | 對於執行時間超過一小時且跨多個行的任務,此欄位只會在表示執行結束的行中填入。 如需可能的值,請參閱 終止程式代碼值。 |
compute |
陣列 | 關於工作任務執行中使用的運算資源細節 | 2025 年 12 月初之前已發出的列未被填入 |
termination_type |
字串 | 工作任務執行的終止類型 | 2025 年 12 月初之前已發出的列未被填入 |
task_parameters |
地圖 | 工作任務執行中使用的任務層級參數 | 2025 年 12 月初之前已發出的列未被填入 |
setup_duration_seconds |
long | 設定階段的持續時間以秒數計 | 2025 年 12 月初之前已發出的列未被填入 |
cleanup_duration_seconds |
long | 該任務的清理階段持續時間為秒 | 2025 年 12 月初之前已發出的列未被填入 |
execution_duration_seconds |
long | 任務執行階段的持續時間以秒為單位 | 2025 年 12 月初之前已發出的列未被填入 |
管線數據表架構
管線表格是緩慢變更的維度表格 (SCD2)。 當數據列變更時,會發出新的數據列,以邏輯方式取代前一個數據列。
表格路徑: system.lakeflow.pipelines
| 欄位名稱 | 數據類型 | Description | Notes |
|---|---|---|---|
account_id |
字串 | 此管線所屬帳戶的標識碼 | |
workspace_id |
字串 | 此管線所屬工作區的標識碼 | |
pipeline_id |
字串 | 管線的標識碼 | 僅在單一工作區內具有唯一性 |
pipeline_type |
字串 | 管線的類型 | 如需可能的值,請參閱 管線類型值 |
name |
字串 | 管線使用者提供的名稱 | |
created_by |
字串 | 用戶的電子郵件或建立管線之服務主體的標識碼 | |
run_as |
字串 | 用於管線執行之期間以使用許可權的使用者的電子郵件或服務主體的標識碼 | |
tags |
地圖 | 與此作業相關聯的使用者提供自定義標籤 | |
settings |
結構 | 管線的設定 | 請參閱 管線設定 |
configuration |
地圖 | 使用者提供的管線配置 | |
change_time |
時間戳記 | 上次修改管線的時間 | 時區記錄為 +00:00 (UTC) |
delete_time |
時間戳記 | 使用者刪除管線的時間 | 時區記錄為 +00:00 (UTC) |
create_time |
時間戳記 | 使用者建立管線的時間點。 時區記錄為 +00:00(UTC)。 | 2025 年 12 月初之前已發出的列未被填入 |
範例查詢
-- Get the most recent version of a pipeline
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY workspace_id, pipeline_id ORDER BY change_time DESC) as rn
FROM
system.lakeflow.pipelines QUALIFY rn=1
-- Enrich billing logs with pipeline metadata
with latest_pipelines AS (
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY workspace_id, pipeline_id ORDER BY change_time DESC) as rn
FROM
system.lakeflow.pipelines QUALIFY rn=1
)
SELECT
usage.*,
pipelines.*
FROM system.billing.usage
LEFT JOIN latest_pipelines
ON (usage.workspace_id = pipelines.workspace_id
AND usage.usage_metadata.dlt_pipeline_id = pipelines.pipeline_id)
WHERE
usage.usage_metadata.dlt_pipeline_id IS NOT NULL
管線更新時程架構資料表
工作流程更新時間表資料表在生成時即固定且完整。
表格路徑: system.lakeflow.pipeline_update_timeline
| 欄位名稱 | 數據類型 | Description | Notes |
|---|---|---|---|
account_id |
字串 | 此管線所屬帳戶的標識碼 | |
workspace_id |
字串 | 此管線所屬工作區的標識碼 | |
pipeline_id |
字串 | 管線的標識碼 | 僅在單一工作區內具有唯一性 |
update_id |
字串 | 管線更新的識別碼 | 僅在單一工作區內具有唯一性 |
update_type |
字串 | 管線更新的類型 | 如需可能的值,請參閱 管線更新類型值 |
request_id |
字串 | 要求的標識碼。 有助於了解必須重試/重新啟動更新的次數 | |
run_as_user_name |
字串 | 用於管線更新權限的使用者電子郵件或服務主體的 ID | |
trigger_type |
字串 | 觸發此更新的原因 | 如需可能的值,請參閱 管線觸發程式類型值 |
trigger_details |
結構 | 管線觸發程式的詳細資料 | 如需可能的值,請參閱 管線觸發程式類型詳細資料 |
result_state |
字串 | 管線更新的結果 | 對於持續超過 1 小時且跨越多個列進行的更新,此欄只會填入代表更新結束的列中。 如需可能的值,請參閱 管線結果參考。 |
compute |
結構 | 管線更新中使用的計算資源的詳細資料 | |
period_start_time |
時間戳記 | 管線更新的開始時間或小時。 此值會儲存為 UTC 時間戳記。 | 時區資訊記錄在數值的末尾,其中 +00:00 代表 UTC。 如需了解 Databricks 如何將長時間運行劃分為每小時間隔的詳細資訊,請參閱 時間線切割邏輯。 |
period_end_time |
時間戳記 | 管線更新或每小時操作的結束時間。 此值會儲存為 UTC 時間戳記。 | 時區資訊記錄在數值的末尾,其中 +00:00 代表 UTC。 如需了解 Databricks 如何將長時間運行劃分為每小時間隔的詳細資訊,請參閱 時間線切割邏輯。 |
refresh_selection |
陣列 | 要更新的表格清單,無需完全刷新 | |
full_refresh_selection |
陣列 | 要使用 fullRefresh 更新的資料表清單 | |
reset_checkpoint_selection |
陣列 | 用於清除檢查點的串流流程清單 |
範例查詢
-- This query gets the daily pipeline update count for a workspace for the last 7 days:
SELECT
workspace_id,
COUNT(DISTINCT update_id) as update_count,
to_date(period_start_time) as date
FROM system.lakeflow.pipeline_update_timeline
WHERE
period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL
-- This query returns the daily pipeline update count for a workspace for the last 7 days, distributed by the outcome of the pipeline update.
SELECT
workspace_id,
COUNT(DISTINCT update_id) as update_count,
result_state,
to_date(period_start_time) as date
FROM system.lakeflow.pipeline_update_timeline
WHERE
period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
AND result_state IS NOT NULL
GROUP BY ALL
-- This query returns the average time of pipeline updates, measured in seconds. The records are organized by pipeline. A top 90 and a 95 percentile column show the average lengths of the pipeline's longest updates.
with pipeline_update_duration as (
SELECT
workspace_id,
pipeline_id,
update_id,
CAST(SUM(period_end_time - period_start_time) AS LONG) as duration
FROM
system.lakeflow.pipeline_update_timeline
WHERE
period_start_time > CURRENT_TIMESTAMP() - INTERVAL 7 DAYS
GROUP BY ALL
)
SELECT
t1.workspace_id,
t1.pipeline_id,
COUNT(DISTINCT t1.update_id) as update_count,
MEAN(t1.duration) as mean_seconds,
AVG(t1.duration) as avg_seconds,
PERCENTILE(t1.duration, 0.9) as p90_seconds,
PERCENTILE(t1.duration, 0.95) as p95_seconds
FROM
pipeline_update_duration t1
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100
常見聯結模式
下列各節提供範例查詢,展示作業系統表中常見的連結模式。
合併作業和作業執行時間軸資料表
豐富作業運行資訊,加入作業名稱
with jobs as (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM system.lakeflow.jobs QUALIFY rn=1
)
SELECT
job_run_timeline.*
jobs.name
FROM system.lakeflow.job_run_timeline
LEFT JOIN jobs USING (workspace_id, job_id)
合併工作運行時間表和使用情況表
使用作業運行元數據豐富每個計費日誌
以下查詢會使用來自經典與無伺服器工作的執行中繼資料,來豐富帳單日誌:
with aggregated_job_runs AS (
SELECT
j.workspace_id,
COALESCE(t.job_id, j.job_id) as origin_job_id,
COALESCE(t.job_run_id, j.run_id) AS origin_job_run_id,
j.job_id as billing_job_id,
j.run_id as billing_run_id,
CASE WHEN j.root_task_run_id IS NOT NULL THEN true ELSE false END AS is_workflow_run
FROM
system.lakeflow.job_run_timeline j
LEFT JOIN
system.lakeflow.job_task_run_timeline t
ON
j.workspace_id = t.workspace_id
AND j.root_task_run_id = t.run_id
WHERE j.period_start_time >= CURRENT_DATE() - INTERVAL 7 DAYS
GROUP BY ALL
),
billing_logs_enriched AS (
SELECT
t2.origin_job_id,
t2.origin_job_run_id,
t1.*
FROM system.billing.usage t1
INNER JOIN aggregated_job_runs t2
ON t1.workspace_id = t2.workspace_id
AND t1.usage_metadata.job_id = t2.billing_job_id
AND t1.usage_metadata.job_run_id = t2.billing_run_id
WHERE
billing_origin_product="JOBS" AND usage_date >= CURRENT_DATE() - INTERVAL 7 DAYS
)
SELECT
workspace_id,
origin_job_id AS job_id,
origin_job_run_id AS run_id,
sku_name,
SUM(usage_quantity) as total_usage_quantity,
SUM(CASE WHEN usage_metadata.job_run_id != origin_job_run_id THEN usage_quantity ELSE 0 END) AS workflow_run_usage_quantity,
COUNT(DISTINCT usage_metadata.job_run_id) - 1 AS workflow_runs
FROM billing_logs_enriched
GROUP BY ALL
計算每個作業執行的成本
此查詢會與 billing.usage 系統數據表聯結,以計算每個作業執行的成本。
with jobs_usage AS (
SELECT
*,
usage_metadata.job_id,
usage_metadata.job_run_id as run_id,
identity_metadata.run_as as run_as
FROM system.billing.usage
WHERE billing_origin_product="JOBS"
),
jobs_usage_with_usd AS (
SELECT
jobs_usage.*,
usage_quantity * pricing.default as usage_usd
FROM jobs_usage
LEFT JOIN system.billing.list_prices pricing ON
jobs_usage.sku_name = pricing.sku_name
AND pricing.price_start_time <= jobs_usage.usage_start_time
AND (pricing.price_end_time >= jobs_usage.usage_start_time OR pricing.price_end_time IS NULL)
AND pricing.currency_code="USD"
),
jobs_usage_aggregated AS (
SELECT
workspace_id,
job_id,
run_id,
FIRST(run_as, TRUE) as run_as,
sku_name,
SUM(usage_usd) as usage_usd,
SUM(usage_quantity) as usage_quantity
FROM jobs_usage_with_usd
GROUP BY ALL
)
SELECT
t1.*,
MIN(period_start_time) as run_start_time,
MAX(period_end_time) as run_end_time,
FIRST(result_state, TRUE) as result_state
FROM jobs_usage_aggregated t1
LEFT JOIN system.lakeflow.job_run_timeline t2 USING (workspace_id, job_id, run_id)
GROUP BY ALL
ORDER BY usage_usd DESC
LIMIT 100
取得SUBMIT_RUN作業的使用記錄
SELECT
*
FROM system.billing.usage
WHERE
EXISTS (
SELECT 1
FROM system.lakeflow.job_run_timeline
WHERE
job_run_timeline.job_id = usage_metadata.job_id
AND run_name = :run_name
AND workspace_id = :workspace_id
)
聯結作業工作執行時程表和叢集數據表
使用叢集元數據執行擴充作業工作
with clusters as (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
FROM system.compute.clusters QUALIFY rn=1
),
exploded_task_runs AS (
SELECT
*,
EXPLODE(compute_ids) as cluster_id
FROM system.lakeflow.job_task_run_timeline
WHERE array_size(compute_ids) > 0
)
SELECT
*
FROM exploded_task_runs t1
LEFT JOIN clusters t2
USING (workspace_id, cluster_id)
尋找在所有用途計算上執行的作業
此查詢會與 compute.clusters 系統數據表聯結,以傳回在通用計算資源上執行的最近作業,而不是在任務計算資源上執行的作業。
with clusters AS (
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY workspace_id, cluster_id ORDER BY change_time DESC) as rn
FROM system.compute.clusters
WHERE cluster_source="UI" OR cluster_source="API"
QUALIFY rn=1
),
job_tasks_exploded AS (
SELECT
workspace_id,
job_id,
EXPLODE(compute_ids) as cluster_id
FROM system.lakeflow.job_task_run_timeline
WHERE period_start_time >= CURRENT_DATE() - INTERVAL 30 DAY
GROUP BY ALL
),
all_purpose_cluster_jobs AS (
SELECT
t1.*,
t2.cluster_name,
t2.owned_by,
t2.dbr_version
FROM job_tasks_exploded t1
INNER JOIN clusters t2 USING (workspace_id, cluster_id)
)
SELECT * FROM all_purpose_cluster_jobs LIMIT 10;
尋找過去 30 天內未執行的作業
此查詢會 lakeflow.jobs 聯結 和 lakeflow.job_run_timeline 系統資料表,以傳回過去 30 天內未執行的作業。
with latest_jobs AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM system.lakeflow.jobs QUALIFY rn=1
),
latest_not_deleted_jobs AS (
SELECT
workspace_id,
job_id,
name,
change_time,
tags
FROM latest_jobs WHERE delete_time IS NULL
),
last_seen_job_timestamp AS (
SELECT
workspace_id,
job_id,
MAX(period_start_time) as last_executed_at
FROM system.lakeflow.job_run_timeline
WHERE
run_type="JOB_RUN"
GROUP BY ALL
)
SELECT
t1.workspace_id,
t1.job_id,
t1.name,
t1.change_time as last_modified_at,
t2.last_executed_at,
t1.tags
FROM latest_not_deleted_jobs t1
LEFT JOIN last_seen_job_timestamp t2
USING (workspace_id, job_id)
WHERE
(t2.last_executed_at <= CURRENT_DATE() - INTERVAL 30 DAYS) OR (t2.last_executed_at IS NULL)
ORDER BY last_executed_at ASC
作業監視儀錶板
下列儀錶板會使用系統數據表來協助您開始監視作業和作業健康情況。 其中包含常見的使用案例,例如作業效能追蹤、失敗監視和資源使用率。
如需下載儀錶板的資訊,請參閱 監視作業成本 & 效能與系統資料表
Troubleshooting
作業未記錄在 lakeflow.jobs 數據表中
如果系統資料表中看不到工作:
- 過去 365 天內未修改工作
- 修改架構中出現的任何作業欄位,以發出新的記錄。
- 職位是在不同的地區創建的
- 最近的職位建立(資料表延遲)
找不到在 job_run_timeline 表格中出現的工作
並非所有作業執行都會在任何地方顯示。 雖然 JOB_RUN 項目出現在所有作業相關數據表中,WORKFLOW_RUN(筆記本工作流程執行)只會記錄在 job_run_timeline 中,而 SUBMIT_RUN(一次性提交的執行)只會記錄在這兩個時間軸數據表中。 這些運行結果不會填入到其他作業系統資料表,例如 jobs 或 job_tasks。
請參閱下面的 執行型別 表格,以取得每種執行型別可見和存取位置的詳細明細。
無法在 billing.usage 表格中看到作業執行
在 system.billing.usage中,只會針對在作業計算或無伺服器計算上執行的作業填入 usage_metadata.job_id。
此外,WORKFLOW_RUN 作業在 usage_metadata.job_id中沒有自己的 usage_metadata.job_run_id 或 system.billing.usage 屬性。
相反地,其計算使用量會歸屬於觸發它們的父筆記本。
這意味著當筆記本啟動工作流程運行時,所有計算成本都會顯示在父筆記本的使用量之下,而不會作為一個獨立的工作流程項目顯示。
如需詳細資訊,請參閱 使用量元數據參考。
計算在全用途計算上執行之作業的成本
針對在目的計算上執行之作業的精確成本計算,無法達到 100% 精確度。 當作業在互動式(所有用途)計算上執行時,筆記本、SQL 查詢或其他作業等多個工作負載通常會在同一個計算資源上同時執行。 因為叢集資源是共用的,因此計算成本和個別作業執行之間沒有直接的 1:1 對應。
為了精確地追蹤任務成本,Databricks 建議在專用運算或無伺服器運算上執行任務,其中 usage_metadata.job_id 和 usage_metadata.job_run_id 能夠精確地進行成本歸屬。
如果您必須使用通用計算,您可以:
- 根據
system.billing.usage監視usage_metadata.cluster_id的整體叢集使用量和成本。 - 分別追蹤作業執行時間的指標。
- 請考慮任何成本估計值都會因為共享資源而近似。
如需成本屬性的詳細資訊,請參閱 使用量元數據參考。
參考值
以下部分包含與工作有關的表格中特定欄位的參考資料。
時間軸數據表中的切片邏輯
period_start_time和period_end_time表中的job_run_timeline和job_task_run_timeline欄記錄作業執行或工作執行的有效運行時間。
:::警告 重要變更
自 2026 年 1 月 19 日起,新增至時間線資料表的新列將會使用 時鐘小時對齊的切片邏輯。 現有的排位將保持不變。
切片會根據運行開始時間,每小時建立一次。 例如,一個工作從下午4:47開始,會產生下午4:47-5:47、下午5:47-6:47的切片,依此類推。
切片會對齊時鐘的邊界。 例如,若一個工作從下午 4:47 開始,會建立 4:47-5:00、5:00-6:00、6:00-7:00 的切片,依此類推。 詳情請參見 時鐘-小時對齊切片邏輯 。
:::
每個數據列最多會記錄一個小時的運行時間。 超過 1 小時的執行會記錄在多個數據列上。 此分片確保能夠對長時間執行的作業進行每小時粒度的監控。
Note
如果一個運行從未開始執行,則由period_start_time等於period_end_time的數據列來表示。 這表示沒有作用中的運行時環境。 若要瞭解執行為何未啟動,請檢查 termination_code 欄。
短期執行的工作
針對短於 1 小時的執行,會發出單一數據列,並將 period_start_time 設定為回合的開始時間,並 period_end_time 設定為回合的結束時間。
例如,作業從下午 12:13 UTC 開始,並以下午 12:45 UTC 結束,以單一數據列表示:
| workspace_id | job_id | run_id | period_start_time | period_end_time |
|---|---|---|---|---|
| 6051921418418893 | 280090038844882 | 174832649710507 | 2025-06-08T12:13:01.605 | 2025-06-08T12:45:06.009 |
長時間執行的工作
超過 1 小時的執行期間,會發出多個相同run_id的數據列,每個數據列分別代表最多一小時的執行時間。
- 第一行從運行的實際開始時間開始,並在第一小時的運行結束時結束。
- 中間資料列(如果有的話)跨越整小時視窗,對齊上一個切片
period_end_time。 - 最後一行會從上一個切片的開頭開始,並在執行的實際結束時間結束。
例如,從下午 4:47 UTC 到下午 8:28 UTC 執行的作業會分割成多個數據列。 每個數據列都代表一小時的活動,但最後一個數據列可能較短:
| workspace_id | job_id | run_id | period_start_time | period_end_time |
|---|---|---|---|---|
| 6051921418418893 | 280090038844882 | 55408597258956 | 2025-07-01T16:47:55.992 | 2025-07-01T17:47:56.434 |
| 6051921418418893 | 280090038844882 | 55408597258956 | 2025-07-01T17:47:56.434 | 2025-07-01T18:47:58.876 |
| 6051921418418893 | 280090038844882 | 55408597258956 | 2025-07-01T18:47:58.876 | 2025-07-01T19:47:59.682 |
| 6051921418418893 | 280090038844882 | 55408597258956 | 2025-07-01T19:47:59.682 | 2025-07-01T20:28:29.743 |
時鐘-小時對齊切片邏輯
Note
此切片邏輯適用於自 2026 年 1 月 19 日起工作時間軸表中新增的列。
自 2026 年 1 月 19 日起,時間軸表採用時鐘小時對齊的切片方式。 所有時間片都與標準時鐘邊界對齊。
對於執行時間少於一小時且在同一鐘點內開始和結束的工作,將生成一行記錄:
| workspace_id | job_id | run_id | period_start_time | period_end_time |
|---|---|---|---|---|
| 6051921418418893 | 280090038844882 | 174832649710507 | 2025-12-08 T12:13:01.605 | 2025-12-08T12:45:06.009 |
對於跨越時鐘時區邊界的工作執行,會發出多列切片,並對齊於時鐘時段:
- 第一排從實際起跑時間開始,到下一個時鐘邊界結束。
- 中間排(如有)跨越整個時鐘小時。 例如:下午2:00-3:00和3:00-4:00。
- 最後一排從時鐘點邊界開始,直到跑道的實際結束時間結束。
例如,從上午 1:25 到 3:40(UTC)的作業運行會被分割成三列:
| workspace_id | job_id | run_id | period_start_time | period_end_time |
|---|---|---|---|---|
| 6051921418418893 | 280090038844882 | 55408597258956 | 2025-12-01T01:25:00.000 | 2025-12-01T02:00:00.000 |
| 6051921418418893 | 280090038844882 | 55408597258956 | 2025-12-01T02:00:00.000 | 2025-12-01T03:00:00.000 |
| 6051921418418893 | 280090038844882 | 55408597258956 | 2025-12-01T03:00:00.000 | 2025-12-01T03:40:00.000 |
觸發類型值
在 job_run_timeline 資料表中,欄位 trigger_type 的可能值為:
CONTINUOUSCRONFILE_ARRIVALONETIMEONETIME_RETRY
執行類型值
在 job_run_timeline 資料表中,欄位 run_type 的可能值為:
| 類型 | Description | UI 位置 | API 端點 | 系統表格 |
|---|---|---|---|---|
JOB_RUN |
標準作業執行 | 任務 & 任務執行介面 | /jobs 和 /jobs/runs 端點 | jobs、job_tasks、job_run_timeline、job_task_run_timeline |
SUBMIT_RUN |
透過 POST /jobs/runs/submit 一次性執行 | 僅限作業運行的UI | 僅限於 /jobs/runs 的端點 | job_run_timeline、job_task_run_timeline |
WORKFLOW_RUN |
從筆記本工作流程起始執行 | 不可見 | 無法訪問 | job_run_timeline |
結果狀態值
在 job_task_run_timeline 和 job_run_timeline 資料表中,資料行的可能值為 result_state :
| State | Description |
|---|---|
SUCCEEDED |
這次運行已成功完成。 |
FAILED |
執行已完成,並出現錯誤。 |
SKIPPED |
程式未執行,因為未滿足條件。 |
CANCELLED |
因應使用者的要求,執行已被取消。 |
TIMED_OUT |
到達超時後,運行已停止。 |
ERROR |
執行已完成,並出現錯誤。 |
BLOCKED |
執行因上游依賴被封鎖。 |
NULL |
數據列代表長期運行的工作的一個中間部分。
result_state只能在代表執行結束的列中使用。 |
終止碼值
在 job_task_run_timeline 和 job_run_timeline 資料表中,資料行的可能值為 termination_code :
| 終止代碼 | Description |
|---|---|
SUCCESS |
執行已順利完成。 |
CANCELLED |
Databricks 平台在執行期間已取消執行;例如,如果超過執行持續時間上限。 |
SKIPPED |
執行從未進行,例如,如果上游任務執行失敗、不符合相依性條件類型,或沒有需要執行的實質任務。 |
DRIVER_ERROR |
執行與 Spark 驅動程式通訊時發生錯誤。 |
CLUSTER_ERROR |
執行失敗,因為叢集錯誤。 |
REPOSITORY_CHECKOUT_FAILED |
無法完成簽出,因為與第三方服務通訊時發生錯誤。 |
INVALID_CLUSTER_REQUEST |
執行失敗,因為它發出了啟動叢集的無效要求。 |
WORKSPACE_RUN_LIMIT_EXCEEDED |
工作區已達到同時進行的活動運行數量上限的配額。 請考慮在較大的時間範圍內安排執行計畫。 |
FEATURE_DISABLED |
執行失敗,因為它嘗試存取工作區無法使用的功能。 |
CLUSTER_REQUEST_LIMIT_EXCEEDED |
叢集建立、啟動和向上調整要求的數目已超過分配的速率限制。 請考慮將執行分散在較大的時間範圍內。 |
STORAGE_ACCESS_ERROR |
執行失敗,因為存取客戶 Blob 記憶體時發生錯誤。 |
RUN_EXECUTION_ERROR |
執行已完成,但包含有任務失敗。 |
UNAUTHORIZED_ERROR |
執行失敗,因為存取資源時發生許可權問題。 |
LIBRARY_INSTALLATION_ERROR |
安裝使用者要求的程式庫時,執行失敗。 原因可能包括,但不限於:提供的連結庫無效,或沒有足夠的許可權可安裝連結庫。 |
MAX_CONCURRENT_RUNS_EXCEEDED |
排程的執行超過為作業設定的最大並行執行限制。 |
MAX_SPARK_CONTEXTS_EXCEEDED |
執行排程在已達到設定建立內容數目上限的叢集上。 |
RESOURCE_NOT_FOUND |
執行執行所需的資源不存在。 |
INVALID_RUN_CONFIGURATION |
執行失敗,因為設定無效。 |
CLOUD_FAILURE |
執行失敗,因為雲端提供者問題。 |
MAX_JOB_QUEUE_SIZE_EXCEEDED |
因為達到作業層級佇列大小限制,所以已略過執行。 |
管線類型值
在 pipelines 資料表中,欄位 pipeline_type 的可能值為:
| 管線類型 | Description |
|---|---|
ETL_PIPELINE |
標準管線 |
MATERIALIZED_VIEW |
Databricks SQL 中的具體化檢視 |
STREAMING_TABLE |
Databricks SQL 中的串流數據表 |
INGESTION_PIPELINE |
Lakeflow Connect 資料匯入器 |
INGESTION_GATEWAY |
Lakeflow Connect 閘道擷取器 |
管道參考結果
在 pipeline_update_timeline 資料表中,欄位 result_state 的可能值為:
COMPLETEDFAILEDCANCELED
管線設定參考
在 pipelines 資料表中,欄位 settings 的可能值為:
| Value | Description |
|---|---|
photon |
指示是否使用 Photon 執行管線的旗標 |
development |
一個指示,用於判斷是否在開發或生產模式下執行管線 |
continuous |
用於指示是否要持續執行管線的標誌 |
serverless |
旗標顯示是否要在無伺服器叢集上執行管線 |
edition |
要執行管線的產品版本 |
channel |
要使用的管線運行時間版本 |
管線更新類型值
在 pipeline_update_timeline 資料表中,欄位 update_type 的可能值為:
API_CALLRETRY_ON_FAILURESERVICE_UPGRADESCHEMA_CHANGEJOB_TASKUSER_ACTIONDBSQL_REQUESTSETTINGS_CHANGESCHEMA_EXPLORATIONINFRASTRUCTURE_MAINTENANCESTART_RESOURCES
管線觸發類型值
在 pipeline_update_timeline 資料表中,欄位 trigger_type 的可能值為:
| Value | Description |
|---|---|
job_task |
觸發管線更新的任務詳細資料 |
管線觸發類型詳細資料
在pipeline_update_timeline 表格中,trigger_type.job_task 結構的可能值為:
| Value | Description | Notes |
|---|---|---|
job_id |
觸發管線更新之作業識別碼 | 此 SQL_SCHEDULE 值表示這個 job_task 已被排程設為 SQL 程式碼的一部分。 |
job_task_run_id |
觸發管線更新之作業工作執行的識別碼 | 此 SQL_SCHEDULE 值表示這個 job_task 已被排程設為 SQL 程式碼的一部分。 |
performance_target |
僅適用於無伺服器管線的更新 | 不是PERFORMANCE_OPTIMIZED就是STANDARD |