GOOGLE CLOUD データ基盤コース

Schedulerが起点 — Workflowsでdbt実行を組み立てる

Cloud Run Jobでdbt buildを実行し、その起動・待機・再試行・定期実行をWorkflowsとCloud Schedulerに分離します。

TL;DR

  1. Cloud Scheduler が時刻に基づく唯一のトリガー。
  2. 親Workflowは実行モードを決め、子Workflowへ処理単位を委譲する。
  3. 子WorkflowはCloud Run Jobの完了を待ち、リトライと失敗を制御する。

01実行の本体

本質はコンテナ内でdbt buildを動かすこと。

GCPデータパイプラインのオーケストレーションの実行の本体図
Artifact Registryのイメージを使うCloud Run Jobが、BigQueryに対してdbtのモデルとテストを実行する。

Artifact Registryのイメージを使うCloud Run Jobが、BigQueryに対してdbtのモデルとテストを実行する。

02Workflowを重ねる理由

Job起動の共通処理を再利用し、実行単位の選択を親へ寄せる。

GCPデータパイプラインのオーケストレーションのWorkflowを重ねる理由図
親Workflowはstaging/snapshotやintermediate/martの目的を選ぶ。子WorkflowはCloud Run Jobを起動して完了を待つテンプレートになる。

親Workflowはstaging/snapshotやintermediate/martの目的を選ぶ。子WorkflowはCloud Run Jobを起動して完了を待つテンプレートになる。

要点:Job起動の共通処理を再利用し、実行単位の選択を親へ寄せる。

03スケジュールと再試行

定刻トリガーと失敗制御を、SQL変換から分離する。

GCPデータパイプラインのオーケストレーションのスケジュールと再試行図
Cloud Scheduler → 親Workflow → 子Workflow → Cloud Run Job → dbt build の順。リトライ上限を超えた失敗はWorkflowの失敗として監視対象にする。

Cloud Scheduler → 親Workflow → 子Workflow → Cloud Run Job → dbt build の順。リトライ上限を超えた失敗はWorkflowの失敗として監視対象にする。

結論

  1. Schedulerはトリガーであり、処理の実体ではない。
  2. WorkflowはJobを直接叩くだけでなく、待機・再試行・実行履歴を担当する。
  3. 物理テーブルの定期更新とviewの手動反映を分けると不要なスキャンを減らせる。