ジョブシステムテーブルリファレンス

プレビュー

このシステムテーブルは パブリック プレビュー段階です。 テーブルにアクセスするには、 system カタログでスキーマを有効にする必要があります。 詳細については、「 システムテーブル スキーマを有効にする」を参照してください

注:

lakeflowスキーマは、以前は workflowと呼ばれていました。両方のスキーマの内容は同じです。 lakeflowスキーマを表示するには、個別に有効にする必要があります。

この記事では、 lakeflowシステムテーブルを使用して、アカウント内のジョブを監視する方法について説明します。これらのテーブルには、同じクラウドリージョンにデプロイされたアカウント内のすべてのワークスペースのレコードが含まれます。別のリージョンのレコードを表示するには、そのリージョンにデプロイされたワークスペースからテーブルを表示する必要があります。

system.lakeflow は、アカウント管理者が有効にする必要があります。SystemSchemas APIを使用して有効にできます。

これらのテーブルをジョブコストとヘルスオブザーバビリティに使用する例については、「 システムテーブルを使用したジョブコストのモニタリング」を参照してください。

利用可能なジョブテーブル

すべてのジョブ関連システムテーブルはsystem.lakeflowスキーマにあります。現在、スキーマには4つのテーブルがあります。

  • jobs:ジョブの作成、削除、基本情報を追跡します。

  • job_tasks: ジョブタスクの作成、削除、および基本情報を追跡します。

  • job_run_timeline:ジョブの開始、終了、および実行結果の状態を記録します。

  • job_task_run_timeline:ジョブタスクの開始、終了、結果の状態を記録します。

ジョブテーブルスキーマ

jobsテーブルは、ゆっくり変化するディメンションテーブルです。行が変更されると、新しい行が発行され、論理的に前の行を置き換えます。

テーブルパス:このシステムテーブルは system.lakeflow.jobsにあります。

列名

データ型

説明

account_id

文字列

このジョブが属するアカウントのID。

workspace_id

文字列

このジョブが属するワークスペースのID。

job_id

文字列

ジョブのID。このキーは、単一のワークスペース内でのみ一意です。

name

文字列

ユーザーが指定したジョブ名。

description

文字列

ユーザー指定のジョブの説明。 2024 年 8 月下旬より前に出力された行には入力されません

creator_id

文字列

ジョブを作成したプリンシパルのID。

tags

文字列

このジョブに関連付けられているユーザー提供のカスタムタグ。

change_time

タイムスタンプ

ジョブが最後に変更された時刻。タイムゾーン情報は値の末尾に記録され、 +00:00はUTCを表します。

delete_time

タイムスタンプ

ジョブがユーザーによって削除された時刻。タイムゾーン情報は値の末尾に記録され、 +00:00はUTCを表します。

run_as

文字列

ジョブ実行に使用される権限を持つユーザーもしくはサービスプリンシパルのID。

ジョブタスクテーブルスキーマ

ジョブ タスク テーブルは、緩やかに変化するディメンション テーブルです。 行が変更されると、新しい行が生成され、論理的に前の行が置き換えられます。

テーブルパス:このシステムテーブルは system.lakeflow.job_tasksにあります。

列名

データ型

説明

account_id

文字列

このジョブが属するアカウントのID。

workspace_id

文字列

このジョブが属するワークスペースのID。

job_id

文字列

ジョブのID。このキーは、単一のワークスペース内でのみ一意です。

task_key

文字列

ジョブ内のタスクの参照キー。このキーは、単一のジョブ内でのみ一意です。

depends_on_keys

配列

このタスクのすべての上流の依存関係のタスクキー。

change_time

タイムスタンプ

タスクが最後に変更された時刻。タイムゾーン情報は値の末尾に記録され、 +00:00はUTCを表します。

delete_time

タイムスタンプ

タスクがユーザーによって削除された時刻。タイムゾーン情報は値の末尾に記録され、 +00:00はUTCを表します。

ジョブ実行タイムラインテーブルスキーマ

ジョブ実行タイムライン テーブルは不変であり、生成された時点で完全です。

テーブルパス:このシステムテーブルは system.lakeflow.job_run_timelineにあります。

列名

データ型

説明

account_id

文字列

このジョブが属するアカウントのID。

workspace_id

文字列

このジョブが属するワークスペースのID。

job_id

文字列

ジョブのID。このキーは、単一のワークスペース内でのみ一意です。

run_id

文字列

ジョブ実行のID。

period_start_time

タイムスタンプ

実行もしくは期間の開始時刻。タイムゾーン情報は値の末尾に記録され、 +00:00はUTCを表します。

period_end_time

タイムスタンプ

実行もしくは期間の終了時刻。タイムゾーン情報は値の末尾に記録され、 +00:00はUTCを表します。

trigger_type

文字列

実行を起動できるトリガーの種類。 使用可能な値については、「トリガーの種類の値」を参照してください

run_type

文字列

ジョブ実行のタイプ。 使用可能な値については、「 実行タイプの値」を参照してください。

run_name

文字列

このジョブ実行に関連付けられたユーザー指定の実行名。

compute_ids

配列

親ジョブ実行のコンピュート ID を含む配列。 SUBMIT_RUN および WORKFLOW_RUN 実行の種類で使用されるクラスターを識別するために使用します。その他のコンピュート情報については、 job_task_run_timeline 表を参照してください。 2024 年 8 月下旬より前に出力された行には入力されません

result_state

文字列

ジョブ実行の結果。 使用可能な値については、 結果の状態の値を参照してください。

termination_code

文字列

ジョブ実行の終了コード。 使用可能な値については、 終了コードの値を参照してください。 2024 年 8 月下旬より前に出力された行には入力されません

job_parameters

マップ

ジョブ実行で使用されるジョブ・レベルのパラメーター。 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

文字列

このジョブが属するアカウントのID。

workspace_id

文字列

このジョブが属するワークスペースのID。

job_id

文字列

ジョブのID。このキーは、単一のワークスペース内でのみ一意です。

run_id

文字列

タスク実行のID。

job_run_id

文字列

ジョブ実行の ID。 2024 年 8 月下旬より前に出力された行には入力されません

parent_run_id

文字列

親実行の ID。 2024 年 8 月下旬より前に出力された行には入力されません

period_start_time

タイムスタンプ

タスクもしくは期間の開始時刻。タイムゾーン情報は値の末尾に記録され、 +00:00はUTCを表します。

period_end_time

タイムスタンプ

タスクもしくは期間の終了時刻。タイムゾーン情報は値の末尾に記録され、 +00:00はUTCを表します。

task_key

文字列

ジョブ内のタスクの参照キー。このキーは、単一のジョブ内でのみ一意です。

compute_ids

配列

ジョブタスクが使用するコンピュートのIDを含む配列。

result_state

文字列

ジョブタスク実行の結果。

termination_code

文字列

タスク実行の終了コード。 この表の下にある可能な値を参照してください。 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テーブルを最大限に活用するために使用できるサンプルクエリーが含まれています。

ジョブの最新バージョンを取得する

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

ワークスペース別の1日あたりのジョブ数

このクエリーは、過去7日間のワークスペース別の1日あたりのジョブ数を取得します:

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

ワークスペース別の1日あたりのジョブステータスの分布

このクエリーは、過去7日間のワークスペース別の1日あたりのジョブ数を、ジョブの実行結果で配分して返します。このクエリーは、ジョブが保留中もしくは実行中の状態にあるレコードをすべて削除します。

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;