共用方式為


工作系統 table 參考

注意

lakeflow schema 先前稱為 workflow。 這兩個架構的內容都相同。 若要讓 lakeflowschema 可見,您必須個別啟用它。

本文提供如何使用 lakeflow 系統 tables 來監控帳戶中作業的參考。 這些 tables 包含您帳戶中部署在相同雲端區域中之所有工作區的記錄。 若要查看來自另一個區域的記錄,您必須從部署於該區域的工作區檢視 tables。

要求

  • system.lakeflow schema 必須由帳戶管理員啟用。請參閱 啟用系統 table 架構
  • 若要存取這些系統 tables,用戶必須選擇以下其中之一方法:
    • 同時為中繼存放區管理員和帳戶管理員,或
    • 具有系統架構的 USESELECT 許可權。 請參閱 Grant 存取系統 tables

可用的工作機會 tables

所有與作業相關的系統 tables 都存在於 system.lakeflowschema中。 目前,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_timelinetable。

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.jobstable

如果在系統 tables中看不到工作:

  • 在過去 365 天內,工作未被修改
    • 修改 schema 中存在的任何作業欄位,以發出新的記錄。
  • 職位是在不同的地區創建的
  • 最近的就業創造(table 滯後)

無法找到在 job_run_timelinetable 中看到的工作

並非所有作業執行都會在任何地方顯示。 雖然 JOB_RUN 項目出現在所有與作業相關的 tables中,WORKFLOW_RUN(筆記本工作流程執行)只會記錄在 job_run_timeline 中,而 SUBMIT_RUN(一次性提交的執行)只會記錄在時間軸 tables中。 這些運行不會被填入其他作業系統 tables,例如 jobsjob_tasks

請參閱下方 執行table 類型,以取得 where 每種執行類型都可見且可存取的詳細明細。

作業在 billing.usagetable 中無法顯示

system.billing.usage中,只會針對在作業計算或無伺服器計算上執行的作業填入 usage_metadata.job_id

此外,WORKFLOW_RUN 作業在 usage_metadata.job_id中沒有自己的 usage_metadata.job_run_idsystem.billing.usage 屬性。 相反地,其計算使用量會歸屬於觸發它們的父筆記本。 這表示當筆記本啟動工作流程執行時,所有計算資源成本都會顯示在父筆記本的使用量中,而不是作為個別的工作流程作業。

如需詳細資訊,請參閱 分析使用量元數據

計算在全用途計算上執行之作業的成本

針對在目的計算上執行之作業的精確成本計算,無法達到 100% 精確度。 當作業在互動式(所有用途)計算上執行時,筆記本、SQL 查詢或其他作業等多個工作負載通常會在同一個計算資源上同時執行。 因為叢集資源是共用的,因此計算成本和個別作業執行之間沒有直接的 1:1 對應。

為了精確追蹤作業成本,Databricks 建議在專用作業計算或無伺服器計算上執行作業,where、usage_metadata.job_idusage_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_typecolumn 的可能 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