作业系统表参考
注意
lakeflow
架构以前称为 workflow
。 这两个架构的内容是完全相同的。 若要使 lakeflow
架构可见,必须单独启用它。
本文提供了有关如何使用 lakeflow
系统表来监视帐户中的作业的参考。 这些表包括帐户中部署在同一云区域内的所有工作区的记录。 若要查看来自其他区域的记录,需要从部署在该区域的工作区查看表。
system.lakeflow
必须由帐户管理员启用。可以使用 SystemSchemas API 启用它。
有关使用这些表实现作业成本和运行状况可观测性的示例,请参阅《使用系统表监视作业成本》。
可用的作业表
所有与作业相关的系统表都位于 system.lakeflow
架构中。 目前,该架构托管四个表:
jobs
:跟踪作业的创建、删除和基本信息。job_tasks
:跟踪作业任务的创建、删除和基本信息。job_run_timeline
:记录作业运行的开始、结束和结果状态。job_task_run_timeline
:记录作业任务的开始、结束和结果状态。
作业表架构
jobs
表是一个渐变维度表。 当行发生更改时,系统会发出新行,以逻辑方式替换上一行。
表路径:此系统表位于 system.lakeflow.jobs
.
列名称 | 数据类型 | 说明 |
---|---|---|
account_id |
string | 此作业所属帐户的 ID。 |
workspace_id |
string | 此作业所属工作区的 ID。 |
job_id |
string | 工作的 ID。 此键仅在单个工作区中唯一。 |
name |
string | 用户提供的作业名称。 |
description |
string | 用户提供的作业说明。 2024 年 8 月下旬之前发出的行未填充。 |
creator_id |
string | 创建作业的主体的 ID。 |
tags |
string | 用户提供的与此作业关联的自定义标签。 |
change_time |
timestamp | 上次修改作业的时间。 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 |
delete_time |
timestamp | 用户删除作业的时间。 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 |
run_as |
string | 对作业运行使用其权限的用户或服务主体的 ID。 |
作业任务表架构
作业任务表是一个渐变维度表。 当行发生更改时,系统会发出新行,以逻辑方式替换上一行。
表路径:此系统表位于 system.lakeflow.job_tasks
.
列名称 | 数据类型 | 说明 |
---|---|---|
account_id |
string | 此作业所属帐户的 ID。 |
workspace_id |
string | 此作业所属工作区的 ID。 |
job_id |
string | 工作的 ID。 此键仅在单个工作区中唯一。 |
task_key |
string | 作业中任务的引用键。 此键仅在单个作业中唯一。 |
depends_on_keys |
array | 此任务的所有上游依赖项的任务键。 |
change_time |
timestamp | 上次修改任务的时间。 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 |
delete_time |
timestamp | 用户删除任务的时间。 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 |
作业运行时间线表架构
作业运行时间线表是不可变的,在生成作业时完成。
表路径:此系统表位于 system.lakeflow.job_run_timeline
.
列名称 | 数据类型 | 说明 |
---|---|---|
account_id |
string | 此作业所属帐户的 ID。 |
workspace_id |
string | 此作业所属工作区的 ID。 |
job_id |
string | 工作的 ID。 此键仅在单个工作区中唯一。 |
run_id |
string | 作业运行的 ID。 |
period_start_time |
timestamp | 运行或时间段的开始时间。 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 |
period_end_time |
timestamp | 运行或时间段的结束时间。 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 |
trigger_type |
string | 可以触发运行的触发器类型。 有关可能的值,请参阅触发器类型值 |
run_type |
string | 作业运行的类型。 有关可能的值,请参阅运行类型值。 |
run_name |
string | 与此作业运行相关、用户提供的运行名称。 |
compute_ids |
array | 包含父作业运行的计算 ID 的数组。 用于标识由 SUBMIT_RUN 和 WORKFLOW_RUN 运行类型使用的群集。 有关其他计算信息,请参阅 job_task_run_timeline 表。 2024 年 8 月下旬之前发出的行未填充。 |
result_state |
string | 作业运行的结果。 有关可能的值,请参阅结果状态值。 |
termination_code |
string | 作业运行的终止代码。 有关可能的值,请参阅终止代码值。 2024 年 8 月下旬之前发出的行未填充。 |
job_parameters |
map | 作业运行中使用的作业级参数。 2024 年 8 月下旬之前发出的行未填充。 |
触发器类型值
trigger_type
列的可能值为:
CONTINUOUS
CRON
FILE_ARRIVAL
ONETIME
ONETIME_RETRY
运行类型值
run_type
列的可能值为:
JOB_RUN
SUBMIT_RUN
:通过 POST /api/2.1/jobs/runs/submit 创建的一次性运行。WORKFLOW_RUN
:从笔记本工作流启动的作业运行。
结果状态值
result_state
列的可能值为:
SUCCEEDED
FAILED
SKIPPED
CANCELLED
TIMED_OUT
ERROR
BLOCKED
终止代码值
termination_code
列的可能值为:
SUCCESS
CANCELLED
SKIPPED
DRIVER_ERROR
CLUSTER_ERROR
REPOSITORY_CHECKOUT_FAILED
INVALID_CLUSTER_REQUEST
WORKSPACE_RUN_LIMIT_EXCEEDED
FEATURE_DISABLED
CLUSTER_REQUEST_LIMIT_EXCEEDED
STORAGE_ACCESS_ERROR
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
作业运行时间线表架构
作业任务运行时间线表在生成时不可变并完成。
表路径:此系统表位于 system.lakeflow.job_task_run_timeline
.
列名称 | 数据类型 | 说明 |
---|---|---|
account_id |
string | 此作业所属帐户的 ID。 |
workspace_id |
string | 此作业所属工作区的 ID。 |
job_id |
string | 工作的 ID。 此键仅在单个工作区中唯一。 |
run_id |
string | 任务运行的 ID。 |
job_run_id |
string | 作业运行的 ID。 2024 年 8 月下旬之前发出的行未填充。 |
parent_run_id |
string | 父运行的 ID。 2024 年 8 月下旬之前发出的行未填充。 |
period_start_time |
timestamp | 任务或时间段的开始时间。 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 |
period_end_time |
timestamp | 任务或时间段的结束时间。 时区信息记录在值的末尾,其中 +00:00 表示 UTC。 |
task_key |
string | 作业中任务的引用键。 此键仅在单个作业中唯一。 |
compute_ids |
array | 包含作业任务使用的计算 ID 的数组。 |
result_state |
string | 作业任务运行的结果。 |
termination_code |
string | 任务运行的终止代码。 请参阅此表下方的可能值。 2024 年 8 月下旬之前发出的行未填充。 |
result_state
列的可能值为:
SUCCEEDED
FAILED
SKIPPED
CANCELLED
TIMED_OUT
ERROR
BLOCKED
termination_code
列的可能值为:
SUCCESS
CANCELLED
SKIPPED
DRIVER_ERROR
CLUSTER_ERROR
REPOSITORY_CHECKOUT_FAILED
INVALID_CLUSTER_REQUEST
WORKSPACE_RUN_LIMIT_EXCEEDED
FEATURE_DISABLED
CLUSTER_REQUEST_LIMIT_EXCEEDED
STORAGE_ACCESS_ERROR
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
示例查询
本部分包含可用于充分利用 Lakeflow 表的示例查询。
- 获取作业的最新版本
- 各工作区的每日作业计数
- 各工作区的每日作业状态分布
- 运行时间最长的作业概览
- 通过 runSubmit 所执行作业的作业运行时间(即 Airflow)
- 作业运行分析
- 基于通用计算运行的作业
- 重试的作业运行
获取作业的最新版本
由于 jobs
和 job_tasks
表是渐变维度表,因此每次进行更改时都会创建新记录。 若要获取作业的最新版本,可以按 change_time
列进行排序。
SELECT
*,
ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
system.lakeflow.jobs QUALIFY rn=1
各工作区的每日作业计数
此查询将获取过去 7 天各工作区的每日作业计数:
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
各工作区的每日作业状态分布
此查询返回过去 7 天内各工作区的每日作业数(按作业运行的结果分布)。 查询将删除所有处于待定或正在运行状态的作业记录。
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
运行时间最长的作业概览
此查询将返回作业运行的平均时间(以秒为单位)。 记录按作业组织。 前 90 和前 95 百分位数列显示该作业最长运行的平均长度。
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
),
most_recent_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
t1.workspace_id,
t1.job_id,
first(t2.name, TRUE) as name,
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
LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_id)
GROUP BY ALL
ORDER BY mean_seconds DESC
LIMIT 100
通过 runSubmit 所执行作业的作业运行时间(即 Airflow)
此查询根据 run_name
参数提供特定作业的历史运行时间。 为了使查询正常工作,必须设置 run_name
。
还可以通过更新 INTERVAL 60 DAYS
部分中的天数来编辑分析的时间长度。
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
作业运行分析
此查询提供特定作业的历史运行时间。 为了使查询正常工作,必须设置 workspace_id
和 job_id
。
还可以通过更新 INTERVAL 60 DAYS
部分中的天数来编辑分析的时间长度。
with job_run_duration as (
SELECT
workspace_id,
job_id,
run_id,
min(period_start_time) as run_start,
max(period_start_time) as run_end,
CAST(SUM(period_end_time - period_start_time) AS LONG) as duration,
FIRST(result_state, TRUE) as result_state
FROM
system.lakeflow.job_run_timeline
WHERE
period_start_time > CURRENT_TIMESTAMP() - INTERVAL 60 DAYS
AND workspace_id={workspace_id}
AND job_id={job_id}
GROUP BY ALL
ORDER BY run_start DESC
),
most_recent_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
t1.workspace_id,
t1.job_id,
t2.name,
t1.run_id,
t1.run_start,
t1.run_end,
t1.duration,
t1.result_state
FROM job_run_duration t1
LEFT OUTER JOIN most_recent_jobs t2 USING (workspace_id, job_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
),
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;
重试的作业运行
此查询收集重试的作业运行的列表,其中包含每次运行的重试次数。
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;