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 |
字符串 | 作业 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 |
字符串 | 作业 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 |
字符串 | 作业 ID | 此密钥仅在单个工作区中是唯一的 |
run_id |
字符串 | 作业运行的 ID | |
period_start_time |
时间戳 | 运行或时间段的开始时间 | 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 有关 Databricks 如何将长时间运行切分为每小时间隔的详细信息,请参阅时间线切片逻辑。 |
period_end_time |
时间戳 | 运行或时间段的结束时间 | 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 有关 Databricks 如何将长时间运行切分为每小时间隔的详细信息,请参阅时间线切片逻辑。 |
trigger_type |
字符串 | 可以触发运行的触发器类型 | 有关可能的值,请参阅触发器类型值 |
run_type |
字符串 | 作业运行的类型 | 有关可能的值,请参阅运行类型值 |
run_name |
字符串 | 与此次任务运行关联的用户提供的运行名称 | |
compute_ids |
数组 | 包含父作业运行的作业计算 ID 的数组 | 用于标识 WORKFLOW_RUN 运行类型使用的作业群集。 有关其他计算信息,请参阅 job_task_run_timeline 表。 |
result_state |
字符串 | 作业运行的结果 | 对于运行超过一小时并被拆分为多行的情况,此列仅在表示运行结束的行中填充。 有关可能的值,请参阅 结果状态值。 |
termination_code |
字符串 | 作业运行的终止代码 | 对于运行超过一小时并被拆分为多行的情况,此列仅在表示运行结束的行中填充。 有关可能的值,请参阅终止代码值。 |
job_parameters |
映射 | 作业运行中使用的作业级别参数 | 仅包含job_parameters中的值。 不包括已弃用的参数字段(notebook_params、 python_params、 python_named_params、 spark_submit_params和 sql_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 |
字符串 | 作业 ID | 仅在单个工作区中唯一 |
run_id |
字符串 | 任务运行的 ID | |
job_run_id |
字符串 | 作业运行的 ID | |
parent_run_id |
字符串 | 父运行的 ID | |
period_start_time |
时间戳 | 任务的开始时间或时间段 | 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 有关 Databricks 如何将长时间运行切分为每小时间隔的详细信息,请参阅时间线切片逻辑。 |
period_end_time |
时间戳 | 任务的结束时间或时间段 | 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 有关 Databricks 如何将长时间运行切分为每小时间隔的详细信息,请参阅时间线切片逻辑。 |
task_key |
字符串 | 作业中任务的引用键 | 此密钥仅在单个作业中是唯一的 |
compute_ids |
数组 | compute_ids数组包含作业任务使用的作业群集、交互式群集和 SQL 仓库的 ID | |
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 |
字符串 | 此管道所属的帐户的 ID | |
workspace_id |
字符串 | 此管道所属的工作区的 ID | |
pipeline_id |
字符串 | 管道的 ID | 仅在单个工作区中唯一 |
pipeline_type |
字符串 | 管道的类型 | 有关可能的值,请参阅 管道类型值 |
name |
字符串 | 管道的用户提供名称 | |
created_by |
字符串 | 用户的电子邮件或创建管道的服务主体的 ID | |
run_as |
字符串 | 用户的电子邮件或其权限用于管道运行的服务主体的 ID | |
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 |
字符串 | 此管道所属的帐户的 ID | |
workspace_id |
字符串 | 此管道所属的工作区的 ID | |
pipeline_id |
字符串 | 管道的 ID | 仅在单个工作区中唯一 |
update_id |
字符串 | 管道更新的 ID | 仅在单个工作区中唯一 |
update_type |
字符串 | 管道更新的类型 | 有关可能的值,请参阅 管道更新类型值 |
request_id |
字符串 | 请求的 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 |
数组 | 在不进行 fullRefresh 的情况下需要更新的表的列表 | |
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)
联接作业运行时间线和使用情况表
使用作业运行元数据扩充每个计费日志
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 系统表联接,以计算每个作业运行的成本。
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 列记录作业运行或任务运行的活动期限。
每行最多记录一个小时的运行时。 持续时间超过 1 小时的运行记录在多个行上。 此切片可确保监视长时间运行的作业时的每小时精细度。
Note
如果一个运行从未开始执行,它由一行表示,其中 period_start_time 等于 period_end_time。 这表示没有活动运行时。 若要了解运行为何未启动,请检查 termination_code 列。
运行时间较短的作业
对于短于 1 小时的运行,将发出单个行,并 period_start_time 设置为运行开始时间并 period_end_time 设置为运行结束时间。
例如,作业从 UTC 下午 12:13 开始,以 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对齐。 - 最后一行从上一个切片的开头开始,到运行的实际结束时间结束。
例如,一个从 UTC 下午 4:47 运行到 UTC 晚上 8:28 的作业被切成多行。 每行表示一小时的活动,最后一行除外,可能较短:
| 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 |
触发器类型值
在 job_run_timeline 表中,trigger_type 列的可能值为:
CONTINUOUSCRONFILE_ARRIVALONETIMEONETIME_RETRY
运行类型值
在 job_run_timeline 表中,run_type 列的可能值为:
| 类型 | Description | UI 位置 | API 终结点 | 系统表 |
|---|---|---|---|---|
JOB_RUN |
标准作业执行 | 作业和作业运行 UI | /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 |
触发管道更新的作业的 ID | 该 SQL_SCHEDULE 值表明此 job_task 已被安排为 SQL 代码的一部分。 |
job_task_run_id |
触发管道更新的作业任务的 ID | 该 SQL_SCHEDULE 值表明此 job_task 已被安排为 SQL 代码的一部分。 |
performance_target |
仅针对无服务器管道更新进行填充 |
PERFORMANCE_OPTIMIZED 或 STANDARD |