dbt

dbt Cloud Jobs: スケジュール実行と通知の実務と試験対策

2026-04-19
NicheeLab編集部

本稿は、dbt Cloudにおけるジョブのスケジュール実行と通知を、現場で迷いがちな設計ポイントに絞って整理します。UIの具体的な挙動やAPIの使いどころ、通知の設計原則を一通り把握できます。

dbt Analytics Engineer Certificationで問われやすい概念(ジョブ構成要素、スケジュール設計、失敗時の通知・再実行方針)を、実務のベストプラクティスと合わせて解説します。

dbt Cloud Jobsの全体像と用語整理

dbt Cloudのジョブは、特定のEnvironmentで一連のコマンド(例: dbt build, dbt test)を定義し、トリガー(スケジュール、手動、API、PR/CI)で起動する単位です。通知はジョブ単位で設定でき、成功・失敗などの状態変化に応じてSlackやメール、(プランに応じて)汎用Webhookに送信できます。

スケジュールはUIでの時刻指定やcron式で設定でき、ジョブ内のステップは定義順に実行されます。モデルの並列度は各コマンドのスレッド数(--threads)で調整します。API経由では任意タイミングで安全に起動でき、Gitブランチの上書き実行や原因メッセージ(cause)の付与も可能です。

  • Job: 実行のひとまとまり(Environment + Steps + Triggers + Notifications)
  • Environment: 接続先や変数、権限の束。ジョブ実行の実行コンテキスト
  • Steps: dbt CLI相当のコマンド列(例: dbt deps → dbt build → dbt docs generate)
  • Triggers: スケジュール、手動、API、PR/CI(Git連携)
  • Notifications: Slack、メール、(プランにより)WebhookにRun結果を配信
トリガー種別主な用途起動遅延の特徴通知の適用
スケジュール定時バッチ、日次・時次・週次安定(基準時刻に従う)成功/失敗/完了に応じて配信
手動/ボタン緊急再実行、検証即時(ユーザー依存)ジョブ設定に従う
API上位オーケストレータからの呼び出し即時〜数秒程度ジョブ設定に従う
PR/CI変更検証(ブランチ/PR単位)イベント依存(Git webhook)通常は失敗時重視

ジョブ実行と通知の概念フロー

Git RepoPR/CI Webhook手動/API呼び出しdbt CloudScheduler (cron/UI)状態変化Job QueueRunner (Env)dbt builddbt testArtifactsNotificationChannelsSlack / Email(Webhook*)Docs/Run Results* Webhookはプランに依存する場合あり

APIでジョブを起動する(POST /api/v2/accounts/{account_id}/jobs/{job_id}/run/)

curl -X POST \
  -H "Authorization: Token <DBT_CLOUD_API_TOKEN>" \
  -H "Content-Type: application/json" \
  https://cloud.getdbt.com/api/v2/accounts/<ACCOUNT_ID>/jobs/<JOB_ID>/run/ \
  -d '{
    "cause": "Triggered from orchestrator",
    "git_branch": "main"
  }'

スケジュール設計の実践ポイント(粒度・順序・時間帯)

まずはデータ到着と下流SLAから逆算して粒度(毎時/日次/週次など)を決めます。増分モデル中心なら毎時または30分間隔、スナップショットや集計締め処理は日次が定石です。重複起動を避けるため、1回の実行時間より十分に長い間隔を確保します。

ジョブ内のステップ順は依存関係に合わせて定義します。例として、dbt deps → seed → build → test → docs generate。seedやtestは必要最小限にし、遅いテストは夜間に分離するなど、複数ジョブに分ける判断も有効です。UIのスケジュールは簡易指定とcron式の両方をサポートするため、営業日だけの実行や特定曜日の除外なども表現可能です。

  • 実行時間の上限を見積もり、間隔は1.5〜2倍を目安に設定
  • 上流のロード完了から十分な待ちを入れる(例: 05分開始)
  • 月末締めや営業日スケジュールはcron式で表現
  • docs generateは本番バッチとは分離してもよい(UI応答性のため)

通知設計: Slack・メール・Webhookの使い分け

通知は「誰が」「いつ」「何を」行動するかを基準に設計します。本番ジョブは失敗時の即時通知、成功時は集約やサマリのみとするのが一般的です。Slackはチャンネル連携による可視性、メールは監査や長文メッセージの強みがあります。Webhook(利用可能なプラン)を使えば外部アラート管理と連携できます。

ジョブごとに通知を分けるとノイズを抑制できます。夜間の失敗はオンコール向け、検証用ジョブは開発チャンネルへ。メッセージにはジョブ名、環境、実行ID、原因(cause)を含めると一次切り分けが迅速になります。

  • 本番は「失敗時のみ」即時通知、成功は日次サマリに集約
  • CI通知は本番チャンネルに混在させない(誤報防止)
  • Webhookで外部のアラート基盤やチケット起票と連携
  • 通知にRun URLと原因メモを必ず含める

手順: ジョブ作成からスケジュール・通知まで

1) Environmentを確認し、接続先・権限・変数(環境変数やdbt_project.ymlのtarget等)を確定。2) Jobを作成し、Stepsにdbtコマンド列を登録。3) Scheduleで実行間隔(UI選択またはcron式)を設定。4) NotificationsでSlack/メール/Webhookを紐付け、イベント(成功/失敗/完了)を選択。5) テスト実行してRun結果とアーティファクト(Run results、logs)の到達を確認します。

ジョブ名には環境と粒度を含めると運用が明快になります(例: prod-hourly-build)。コマンドの--threadsや--select/--excludeでスコープを厳密化し、遅いモデルや不安定な外部依存は別ジョブに切り出します。

  • 例: dbt deps → dbt seed --select tags:seed_core → dbt build --select state:modified+ → dbt test --select tag:critical
  • スケジュールはまず広めに取り、安定を確認して短縮する
  • 通知先は最小限から開始し、誤報がないことを確認して拡大

ジョブの代表的なステップ例

dbt deps
# 重要なシードのみ投入(タグで制御)
dbt seed --select tag:seed_core --threads 4
# 差分重視。上流変更影響を含めて実行
dbt build --select state:modified+ --threads 8
# 重要テストだけ本番バッチに残す
dbt test --select tag:critical

信頼性運用: 冪等・再実行・タイムアウトの考え方

増分モデルは冪等性を重視し、再実行しても同じ結果になるよう設計します。上流遅延でデータ未着のときは空実行でも壊れないことが重要です。失敗時は原則として原因を切り分け、再実行は手動またはAPIから行い、原因(cause)を必ず記録します。

重複起動のリスクを避けるため、実行時間に対して十分なスケジュール間隔を取り、長時間化が続く場合はモデル分割やスレッド調整、対象スコープの見直しを行います。ログとアーティファクトを体系的に保管し、メトリクス(成功率、実行時間、失敗理由)を継続的に可視化します。

  • 冪等な増分ロジック(unique key、適切なmerge戦略)
  • 実行時間のばらつき監視とスケジュール再評価
  • API再実行時はgit_branchやschema_overrideに注意
  • 長時間テストは別ジョブ化で本番バッチを細く短く

試験対策の要点と落とし穴

ジョブはEnvironment・Steps・Triggers・Notificationsの組み合わせであること、スケジュールはUIとcron式の両方で指定できること、通知はジョブ単位で制御しやすいことを押さえてください。PR/CIは本番スケジュールとは独立に設計し、通知チャンネルも分離するのが望ましいです。

落とし穴は、実行時間とスケジュール間隔の不整合、成功通知の出し過ぎによるノイズ、原因メモ未入力での追跡困難です。試験では「どのトリガーを使うべきか」「どの通知先に送るべきか」をユースケースから選び分ける問題がよく出ます。

  • 定時バッチはスケジュール、外部からの即時実行はAPI
  • 本番は失敗時のみ即時通知、成功は集約または無通知
  • ジョブ内は依存順にコマンドを並べる(deps→build→test など)
  • 再実行時は冪等と原因記録(cause)の両立を意識

問題で確認

Analytics Engineer

問題 1

毎時実行の本番ジョブで、増分モデルがまれに40分以上かかり次のスケジュールと重なります。通知はオンコール向けSlackに送っています。最も適切な対応はどれか。

  1. A. 実行間隔を延ばし、成功通知は停止して失敗時のみSlack通知にする
  2. B. スレッド数を無制限に増やし、成功・失敗ともにメールとSlackに重複通知する
  3. C. ジョブを手動実行専用に変更し、スケジュールは無効化する
  4. D. 同じジョブを2つ同時に走らせ、早く終わった方だけを採用する

正解: A

重複起動を避けるには実行時間に見合う間隔へ調整するのが基本です。通知ノイズを抑えるため、本番は失敗時のみ即時通知が妥当です。Bは過剰通知、CはSLAを満たせない、Dは競合と二重書き込みのリスクがあります。

よくある質問

スケジュールはUI指定とcron式のどちらを使うべきですか?

要件が単純(毎時、毎日など)ならUI指定で十分です。営業日や特定曜日除外など柔軟性が必要な場合はcron式が向きます。いずれもジョブの安定運用に影響するため、実行時間のばらつきと依存関係を踏まえて設計してください。

通知はジョブ全体の成功・失敗以外にも細かく設定できますか?

基本はRunの状態変化(成功、失敗、完了)に連動します。細粒度の条件分岐が必要な場合は、Webhookで外部の通知・アラート基盤に連携し、ルールをそちらで管理するアプローチが実務では有効です。

ジョブがスケジュール時刻にまだ実行中だった場合はどうなりますか?

重複実行を避ける設計が推奨で、実行時間より十分に長い間隔を取るのが安全です。長時間化が常態化している場合は、モデルの分割、対象スコープの見直し、スレッド数やクエリ最適化を検討してください。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
dbt

dbt Model の基礎: SQL で定義する変換の最小単位

Analytics Engineer 向けに、dbt Model の定義、マテリアライゼーション、依存関係、インクリメン...

dbt

dbt Analytics Engineer 試験ガイド: 出題範囲・配点・申込の実務視点

dbt Analytics Engineer 認定の出題範囲、配点の考え方、申込から受験までの流れを、公式ドキュメントの...

dbt

dbt Cloud と dbt Core の違いと選び方:Analytics Engineer 試験に効く要点

dbt Cloud と dbt Core の機能差を、実務と資格対策の両面から整理。スケジューリング、IDE、RBAC、...

dbt

dbt プロジェクト構造ガイド: models / seeds / macros の実務レイアウト

Analytics Engineer 向けに、dbt プロジェクトのディレクトリ構造と命名規約、dbt_project....

dbt

dbt_project.yml の読み方:主要設定と命名を最短で掴む

dbt_project.yml の必須キー、命名解決(database.schema.identifier)、設定優先度...

dbtの記事一覧 (101件)
© 2026 NicheeLab All rights reserved.