作业系统表参考

重要

此系统表为公共预览版。 若要访问表,必须在 system 目录中启用架构。 有关详细信息,请参阅启用系统表架构

注意

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_RUNWORKFLOW_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 列的可能值为:

结果状态值

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 表的示例查询。

获取作业的最新版本

由于 jobsjob_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_idjob_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;