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

プレビュー

この機能はパブリックプレビュー段階です。

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

これらのテーブルをジョブ コストの観測に使用する例については、 「システムテーブルを使用してジョブ コストを監視する」を参照してください。

注:

これらのテーブルは、 asia-south1 リージョンでは使用できません。

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

すべてのジョブ関連のシステムテーブルはsystem.workflowスキーマ内に存在します。 現在、スキーマは 4 つのテーブルをホストしています。

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

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

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

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

ジョブテーブルスキーマ

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

このテーブルでは、次のスキーマを使用します。

列名

データ型

説明

account_id

string

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

workspace_id

string

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

job_id

string

ジョブの ID。

name

string

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

creator_id

string

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

tags

string

このジョブに関連付けられたユーザー指定のカスタム タグ。

change_time

timestamp

システムテーブル行が最後に変更された時刻。

delete_time

timestamp

ユーザーによってジョブが削除された時刻。

run_as

string

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

タスクテーブルスキーマ

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

このテーブルでは、次のスキーマを使用します。

列名

データ型

説明

account_id

string

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

workspace_id

string

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

job_id

string

ジョブの ID。

task_key

string

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

depends_on_keys

array

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

change_time

timestamp

システムテーブル行が最後に変更された時刻。

delete_time

timestamp

ユーザーがタスクを削除した時刻。

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

job_run_timeline テーブルは不変であり、生成時に完全です。

このテーブルでは、次のスキーマを使用します。

列名

データ型

説明

account_id

string

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

workspace_id

string

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

job_id

string

ジョブの ID。

run_id

string

実行されたジョブの ID。

period_start_time

timestamp

実行の開始時刻。

period_end_time

timestamp

実行または期間の終了時刻。

trigger_type

string

実行を開始できるトリガーのタイプ。

result_state

string

ジョブ実行の結果。 この表の下にある指定可能な値を参照してください。

result_state列に指定できる値は次のとおりです。

  • SUCCEEDED

  • FAILED

  • SKIPPED

  • CANCELLED

  • TIMED_OUT

  • ERROR

  • BLOCKED

trigger_type列に指定できる値は次のとおりです。

  • CONTINUOUS

  • CRON

  • FILE_ARRIVAL

  • ONETIME

  • ONETIME_RETRY

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

job_task_run_timeline テーブルは不変であり、生成時に完全です。

このテーブルでは、次のスキーマを使用します。

列名

データ型

説明

account_id

string

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

workspace_id

string

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

job_id

string

ジョブの ID。

run_id

string

実行されたジョブの ID。

period_start_time

timestamp

タスクの開始時刻。

period_end_time

timestamp

タスクまたは期間の終了時刻。

task_key

string

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

compute_ids

array

ジョブ タスクで使用される非サーバレス ジョブ コンピュートおよび非サーバレスSQLウェアハウスの ID を含む配列。

result_state

string

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

result_state列に指定できる値は次のとおりです。

  • SUCCEEDED

  • FAILED

  • SKIPPED

  • CANCELLED

  • TIMED_OUT

  • ERROR

  • BLOCKED

クエリの例

このセクションには、ワークフロー テーブルを最大限に活用するために使用できるサンプル クエリが含まれています。

ジョブの最新バージョンを入手する

jobsテーブルとjob_tasksテーブルは徐々に変化するディメンション テーブルであるため、変更が行われるたびに新しいレコードが作成されます。 ジョブの最新バージョンを取得するには、 change_time列で並べ替えることができます。

SELECT
  *,
  ROW_NUMBER() OVER(PARTITION BY workspace_id, job_id ORDER BY change_time DESC) as rn
FROM
  system.workflow.jobs QUALIFY rn=1

ワークスペース別の毎日のジョブ数

このクエリは、過去 7 日間のワークスペース別の毎日のジョブ数を取得します。

SELECT
  workspace_id,
  COUNT(DISTINCT run_id) as job_count,
  to_date(period_start_time) as date
FROM system.workflow.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.workflow.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.workflow.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.workflow.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

ジョブ実行分析

このクエリは、特定のジョブの履歴を提供します。 クエリを機能させるには、 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.workflow.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.workflow.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"
  QUALIFY rn=1
),
job_tasks_exploded AS (
  SELECT
    workspace_id,
    job_id,
    EXPLODE(compute_ids) as cluster_id
  FROM system.workflow.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;