ジョブシステムテーブルリファレンス
プレビュー
この機能はパブリックプレビュー段階です。
この記事では、 workflow
システムテーブルを使用してアカウント内のジョブを監視する方法について説明します。 これらのテーブルには、同じクラウド リージョン内にデプロイされたアカウント内のすべてのワークスペースのレコードが含まれます。 別のリージョンのレコードを表示するには、そのリージョンにデプロイされたワークスペースのテーブルを表示する必要があります。
system.workflow
アカウント管理者が有効にする必要があります。 SystemSchemas APIを使用して有効にすることができます。
ジョブ コストと健全性の監視にこれらのテーブルを使用する例については、「システムテーブルを使用してジョブ コストを監視する」を参照してください。
注:
これらのテーブルは、 asia-south1
リージョンでは使用できません。
利用可能なジョブテーブル
すべてのジョブ関連のシステムテーブルはsystem.workflow
スキーマ内に存在します。 現在、スキーマは 4 つのテーブルをホストしています。
jobs
: ジョブの作成、削除、および基本情報を追跡します。job_tasks
: ジョブ タスクの作成、削除、および基本情報を追跡します。job_run_timeline
: ジョブ実行の開始、終了、および結果の状態を記録します。job_task_run_timeline
: ジョブ タスクの開始、終了、および結果の状態を記録します。
ジョブテーブルスキーマ
jobs
テーブルは、ゆっくり変化するディメンション テーブルです。 行が変更されると、新しい行が出力され、前の行が論理的に置き換えられます。
このテーブルでは、次のスキーマを使用します。
列名 |
データ型 |
説明 |
---|---|---|
|
string |
このジョブが属するアカウントの ID。 |
|
string |
このジョブが属するワークスペースの ID。 |
|
string |
ジョブの ID。 このキーは単一のワークスペース内でのみ一意です。 |
|
string |
ユーザーが指定したジョブの名前。 |
|
string |
ジョブを作成したプリンシパルの ID。 |
|
string |
このジョブに関連付けられたユーザー指定のカスタム タグ。 |
|
timestamp |
ジョブが最後に変更された時刻。 |
|
timestamp |
ユーザーによってジョブが削除された時刻。 |
|
string |
ジョブ実行に使用される権限を持つユーザーまたはサービスプリンシパルの ID。 |
ジョブタスクテーブルスキーマ
job_tasks
テーブルは、ゆっくり変化するディメンション テーブルです。 行が変更されると、新しい行が出力され、前の行が論理的に置き換えられます。
このテーブルでは、次のスキーマを使用します。
列名 |
データ型 |
説明 |
---|---|---|
|
string |
このジョブが属するアカウントの ID。 |
|
string |
このジョブが属するワークスペースの ID。 |
|
string |
ジョブの ID。 このキーは単一のワークスペース内でのみ一意です。 |
|
string |
ジョブ内のタスクの参照キー。 このキーは単一のジョブ内でのみ一意です。 |
|
array |
このタスクのすべての上流依存関係のタスク キー。 |
|
timestamp |
タスクが最後に変更された時刻。 |
|
timestamp |
ユーザーがタスクを削除した時刻。 |
ジョブ実行タイムライン テーブル スキーマ
job_run_timeline
テーブルは不変であり、生成時に完全です。
このテーブルでは、次のスキーマを使用します。
列名 |
データ型 |
説明 |
---|---|---|
|
string |
このジョブが属するアカウントの ID。 |
|
string |
このジョブが属するワークスペースの ID。 |
|
string |
ジョブの ID。 このキーは単一のワークスペース内でのみ一意です。 |
|
string |
実行されたジョブの ID。 |
|
timestamp |
実行または期間の開始時刻。 |
|
timestamp |
実行または期間の終了時刻。 |
|
string |
実行を開始できるトリガーのタイプ。 |
|
string |
ジョブ実行の結果。 この表の下にある指定可能な値を参照してください。 |
result_state
列に指定できる値は次のとおりです。
SUCCEEDED
FAILED
SKIPPED
CANCELLED
TIMED_OUT
ERROR
BLOCKED
trigger_type
列に指定できる値は次のとおりです。
CONTINUOUS
CRON
FILE_ARRIVAL
ONETIME
ONETIME_RETRY
ジョブタスク実行タイムラインテーブルスキーマ
job_task_run_timeline
テーブルは不変であり、生成時に完全です。
このテーブルでは、次のスキーマを使用します。
列名 |
データ型 |
説明 |
---|---|---|
|
string |
このジョブが属するアカウントの ID。 |
|
string |
このジョブが属するワークスペースの ID。 |
|
string |
ジョブの ID。 このキーは単一のワークスペース内でのみ一意です。 |
|
string |
実行されたタスクの ID。 |
|
timestamp |
タスクまたは期間の開始時刻。 |
|
timestamp |
タスクまたは期間の終了時刻。 |
|
string |
ジョブ内のタスクの参照キー。 このキーは単一のジョブ内でのみ一意です。 |
|
array |
ジョブ タスクで使用される非サーバレス ジョブ コンピュートおよび非サーバレスSQLウェアハウスの ID を含む配列。 |
|
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_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.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" OR cluster_source="API"
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;
再試行されたジョブ実行
このクエリは、再試行されたジョブ 実行 のリストと、各実行の再試行回数を収集します。
with repaired_runs as (
SELECT
workspace_id, job_id, run_id, COUNT(*) - 1 as retries_count
FROM system.workflow.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;