工作系統 table 參考
注意
lakeflow
schema 先前稱為 workflow
。 這兩個架構的內容都相同。 若要讓 lakeflow
schema 可見,您必須個別啟用它。
本文提供如何使用 lakeflow
系統 tables 來監控帳戶中作業的參考。 這些 tables 包含您帳戶中部署在相同雲端區域中之所有工作區的記錄。 若要查看來自另一個區域的記錄,您必須從部署於該區域的工作區檢視 tables。
要求
-
system.lakeflow
schema 必須由帳戶管理員啟用。請參閱 啟用系統 table 架構。 - 若要存取這些系統 tables,用戶必須選擇以下其中之一方法:
- 同時為中繼存放區管理員和帳戶管理員,或
- 具有系統架構的
USE
和SELECT
許可權。 請參閱 Grant 存取系統 tables。
可用的工作機會 tables
所有與作業相關的系統 tables 都存在於 system.lakeflow
schema中。 目前,schema 承載四個 tables:
Table | 描述 | 支援串流 | 免費保留期間 | 包含全域或區域數據 |
---|---|---|---|---|
職位(公開預覽) | 追蹤帳戶中建立的所有工作 | 是的 | 365 天 | 區域性 |
job_tasks (公開預覽版) | 追蹤在帳戶中執行的所有作業工作 | 是的 | 365 天 | 區域性 |
job_run_timeline (公開預覽) | 追蹤作業的執行情況和相關的元數據 | 是的 | 365 天 | 區域性 |
job_task_run_timeline (公開預覽) | 記錄工作執行和相關元數據 | 是的 | 365 天 | 區域性 |
詳細 schema 參考
下列各節提供每個作業相關系統 tables的 schema 參考。
作業 tableschema
jobs
table 是緩時變維度 table (SCD2)。 當數據列變更時,會發出新的數據列,以邏輯方式取代前一個數據列。
Table 路徑: system.lakeflow.jobs
Column 名稱 | 資料類型 | 描述 | 筆記 |
---|---|---|---|
account_id |
字串 | 此作業所屬帳戶的ID標識碼 | |
workspace_id |
字串 | 此作業所屬工作區的ID | |
job_id |
字串 | 工作的識別碼 | 僅在單一工作區內具有唯一性 |
name |
字串 | 使用者提供的工作名稱 | |
description |
字串 | 使用者提供的工作描述 | 如果您已設定 客戶管理的金鑰,則此字段是空的。 2024 年 8 月下旬之前發出的資料列未填入 |
creator_id |
字串 | 創建這項工作的負責人ID | |
tags |
字串 | 與此作業相關聯的使用者提供自定義標籤 | |
change_time |
timestamp | 上次修改作業的時間 | Timezone 記錄為 +00:00(UTC) |
delete_time |
timestamp | 使用者刪除作業的時間 | Timezone 記錄為 +00:00(UTC) |
run_as |
字串 | 用於作業執行的用戶或服務主體的 ID 及其許可權 |
範例查詢
-- 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
作業工作 tableschema
工作任務 table 是緩慢變化維度 table (SCD2)。 當數據列變更時,會發出新的數據列,以邏輯方式取代前一個數據列。
Table 路徑: system.lakeflow.job_tasks
Column 名稱 | 資料類型 | 描述 | 筆記 |
---|---|---|---|
account_id |
字串 | 此作業所屬帳戶的ID標識碼 | |
workspace_id |
字串 | 此作業所屬工作區的ID | |
job_id |
字串 | 工作的識別碼 | 僅在單一工作區內具有唯一性 |
task_key |
字串 | 一個工作中任務的參考鍵 | 僅在單一作業中唯一存在 |
depends_on_keys |
陣列 | 所有此工作上游依賴的任務鍵 | |
change_time |
timestamp | 上次修改任務的時間 | Timezone 記錄為 +00:00(UTC) |
delete_time |
timestamp | 用戶刪除工作的時間 | Timezone 記錄為 +00:00(UTC) |
範例查詢
-- 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
作業執行時程表 tableschema
作業執行時間軸 table 是不可變的,而且會在產生時完成。
Table 路徑: system.lakeflow.job_run_timeline
Column 名稱 | 資料類型 | 描述 | 筆記 |
---|---|---|---|
account_id |
字串 | 此作業所屬帳戶的ID標識碼 | |
workspace_id |
字串 | 此作業所屬工作區的ID | |
job_id |
字串 | 工作的識別碼 | 此金鑰只在單一工作區內是唯一的 |
run_id |
字串 | 作業執行的識別碼 | |
period_start_time |
timestamp | 運行或時間段的開始時間 |
Timezone 資料會在值的末尾被記錄,+00:00 代表 UTC |
period_end_time |
timestamp | 運行或時間週期的結束時間 |
Timezone 信息會記錄在值結尾,+00:00 代表 UTC |
trigger_type |
字串 | 可以觸發執行的觸發器類型 | 如需可能的 values,請參閱 觸發類型 values |
run_type |
字串 | 作業執行的類型 | 如需查看可能的 values,請參閱 中的運行類型 values |
run_name |
字串 | 與此作業執行相關聯的用戶指定的執行名稱 | |
compute_ids |
陣列 | 陣列包含父作業執行的計算 ID | 用於識別 WORKFLOW_RUN 執行類型所使用的作業叢集。 如需其他計算資訊,請參閱 job_task_run_timeline table。2024 年 8 月下旬之前發出的資料列未填入 |
result_state |
字串 | 作業執行的結果 | 如需可能的 values,請參閱 結果狀態 values |
termination_code |
字串 | 作業執行的終止碼 | 如需查詢可能的 values,請參閱 終止代碼 values。 2024 年 8 月下旬之前發出的資料列未填入 |
job_parameters |
map | 作業執行中使用的作業層級 parameters | 此欄位中不包含已棄用 notebook_params 設定。 2024 年 8 月下旬之前發出的資料列未填入 |
範例查詢
-- 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;
作業工作執行時程表 tableschema
作業工作執行時間軸 table 在產生時是不可變且完成的。
Table 路徑: system.lakeflow.job_task_run_timeline
Column 名稱 | 資料類型 | 描述 | 筆記 |
---|---|---|---|
account_id |
字串 | 此作業所屬帳戶的ID標識碼 | |
workspace_id |
字串 | 此作業所屬工作區的ID | |
job_id |
字串 | 工作的識別碼 | 僅在單一工作區內具有唯一性 |
run_id |
字串 | 工作執行的標識碼 | |
job_run_id |
字串 | 作業執行的識別碼 | 2024 年 8 月下旬之前發出的資料列未填入 |
parent_run_id |
字串 | 親執行的識別碼 | 2024 年 8 月下旬之前發出的資料列未填入 |
period_start_time |
timestamp | 任務的開始時間或時間週期 |
Timezone 信息會記錄在值結尾,+00:00 代表 UTC |
period_end_time |
timestamp | 任務的結束時間,或時間週期的結束時間 |
Timezone 資料會在數值結尾處記錄,+00:00 代表 UTC |
task_key |
字串 | 一個工作中任務的參考鍵 | 此金鑰在單一作業中是唯一的 |
compute_ids |
陣列 | compute_ids陣列包含作業工作所使用的作業叢集、互動式叢集和SQL倉儲標識碼 | |
result_state |
字串 | 作業工作執行的結果 | 若需了解可能的 values,請參閱 結果狀態 values |
termination_code |
字串 | 工作執行的終止碼 | 如需可能的 values,請參閱 終止代碼 values。 2024 年 8 月下旬之前發出的資料列未填入 |
常見的 join 模式
下列各節提供範例查詢,以展示工作系統 tables常用的 join 模式。
Join 作業和作業執行時程表 tables
豐富作業運行資訊,加入作業名稱
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 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
usage.*,
coalesce(usage_metadata.job_name, jobs.name) as job_name
FROM system.billing.usage
LEFT JOIN jobs ON usage.workspace_id=jobs.workspace_id AND usage.usage_metadata.job_id=jobs.job_id
WHERE
billing_origin_product="JOBS"
Join 作業執行時程表和使用方式 tables
使用作業運行元數據豐富每個計費日誌
SELECT
t1.*,
t2.*
FROM system.billing.usage t1
LEFT JOIN system.lakeflow.job_run_timeline t2
ON t1.workspace_id = t2.workspace_id
AND t1.usage_metadata.job_id = t2.job_id
AND t1.usage_metadata.job_run_id = t2.run_id
AND t1.usage_start_time >= date_trunc("Hour", t2.period_start_time)
AND t1.usage_start_time < date_trunc("Hour", t2.period_end_time) + INTERVAL 1 HOUR
WHERE
billing_origin_product="JOBS"
計算每個作業執行的成本
此查詢會連結到 billing.usage
系統 table,以計算每次作業執行的成本。
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
Get 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}
)
Join 作業工作執行時程表和叢集 tables
使用叢集元數據執行擴充作業工作
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
exploded_task_runs.*,
clusters.*
FROM exploded_task_runs t1
LEFT JOIN clusters t2
USING (workspace_id, cluster_id)
尋找在所有用途計算上執行的作業
此查詢會與 compute.clusters
系統聯結 table,以傳回在所有用途計算上執行的最近作業,而不是作業計算。
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
),
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;
作業監視儀錶板
下列儀錶板會使用系統 tables 來協助您 get 開始監視作業和作業健康情況。 其中包含常見的使用案例,例如作業效能追蹤、失敗監視和資源使用率。
如需下載儀錶板的相關信息,請參閱 使用系統 tables 監視作業成本 & 效能
故障排除
作業未記錄在 lakeflow.jobs
table
如果在系統 tables中看不到工作:
- 在過去 365 天內,工作未被修改
- 修改 schema 中存在的任何作業欄位,以發出新的記錄。
- 職位是在不同的地區創建的
- 最近的就業創造(table 滯後)
無法找到在 job_run_timeline
table 中看到的工作
並非所有作業執行都會在任何地方顯示。 雖然 JOB_RUN
項目出現在所有與作業相關的 tables中,WORKFLOW_RUN
(筆記本工作流程執行)只會記錄在 job_run_timeline
中,而 SUBMIT_RUN
(一次性提交的執行)只會記錄在時間軸 tables中。 這些運行不會被填入其他作業系統 tables,例如 jobs
或 job_tasks
。
請參閱下方 執行table 類型,以取得 where 每種執行類型都可見且可存取的詳細明細。
作業在 billing.usage
table 中無法顯示
在 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 建議在專用作業計算或無伺服器計算上執行作業,where、usage_metadata.job_id
和 usage_metadata.job_run_id
允許精確的成本歸屬。
如果您必須使用通用計算,您可以:
- 根據
system.billing.usage
監視usage_metadata.cluster_id
的整體叢集使用量和成本。 - 分別追蹤作業執行時間的指標。
- 請考慮任何成本估計值都會因為共享資源而近似。
如需成本屬性的詳細資訊,請參閱 分析使用量元數據。
參考 values
下一節包含作業相關 tables中 selectcolumns 的參考。
觸發器類型 values
trigger_type
column 的可能 values 如下:
CONTINUOUS
CRON
FILE_ARRIVAL
ONETIME
ONETIME_RETRY
執行類型 values
以下是 run_type
column 的可能 values:
類型 | 描述 | UI 位置 | API 端點 | 系統 Tables |
---|---|---|---|---|
JOB_RUN |
標準作業執行 | 任務 & 任務執行介面 | /jobs 和 /jobs/runs endpoints | jobs、job_tasks、job_run_timeline、job_task_run_timeline |
SUBMIT_RUN |
透過 POST /jobs/runs/submit 進行一次性執行 | 僅限作業執行UI | 僅限於 /jobs/runs 的端點 | 工作執行時間表, 任務執行時間表 |
WORKFLOW_RUN |
執行已從 Notebook 工作流程 開始. | 不可見 | 無法存取 | 工作執行時間線 |
結果狀態 values
result_state
column 的可能 values 如下所示:
州 | 描述 |
---|---|
SUCCEEDED |
執行成功完成 |
FAILED |
執行已完成,並出現錯誤 |
SKIPPED |
執行從未執行,因為不符合條件 |
CANCELLED |
已根據使用者的要求取消運行 |
TIMED_OUT |
到達超時之後,運行已停止 |
ERROR |
執行已完成,並出現錯誤 |
BLOCKED |
在上游依賴項被封鎖運行 |
終止程式碼 values
termination_code
column 的可能 values 如下:
終止碼 | 描述 |
---|---|
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 |
叢集建立、啟動和升級的要求數目已超過分配的速限 limit。 請考慮將執行過程分散在較長的時間範圍內 |
STORAGE_ACCESS_ERROR |
執行失敗,因為存取客戶 Blob 記憶體時發生錯誤 |
RUN_EXECUTION_ERROR |
執行已完成,但有一些任務失敗。 |
UNAUTHORIZED_ERROR |
執行失敗,因為存取資源時發生許可權問題 |
LIBRARY_INSTALLATION_ERROR |
安裝使用者要求的程式庫時,執行失敗。 原因可能包括,但不限於:提供的連結庫無效、安裝連結庫的許可權不足等等 |
MAX_CONCURRENT_RUNS_EXCEEDED |
排程的執行超過了作業的最大並行執行次數限制 limitset |
MAX_SPARK_CONTEXTS_EXCEEDED |
該執行被排程在已到達設定的上下文數目上限的叢集上。 |
RESOURCE_NOT_FOUND |
執行所需的資源不存在 |
INVALID_RUN_CONFIGURATION |
執行失敗,因為設定無效 |
CLOUD_FAILURE |
執行失敗,因為雲端提供者問題 |
MAX_JOB_QUEUE_SIZE_EXCEEDED |
因為達到作業層級佇列大小而略過執行 limit |