
dbt Cloudで複数のジョブにmodel実行を分けているときのCI Jobsの挙動を確認してみた
さがらです。
dbt Cloudで複数のジョブにmodel実行を分けているときのCI Jobsの挙動を確認してみたので、本記事でその内容をまとめてみます。
検証の狙い
なぜこんな検証を行うのかというと、CI Jobsはstateを比較するdbt build --select state:modified+
というコマンドで基本的に動かしますが、このstateの比較を行う際、以下のどちらの挙動となるかが不明確だったためです。
- 対象のEnvironment全てのジョブをまとめたstateと比較
- 対象のEnvironmentでの最後のジョブのstateと比較
事前準備
まず、下図のようにチュートリアル定番のjaffle_shopのmodelを3つ定義済みであるとします。
この上で、models/test
というフォルダ内で以下の3モデルを定義します。クエリの内容はとてもシンプルで、a・b・cの文字列を出力するだけのselect文となっています。
- 例:
test/model_a.sql
select 'a' as col1
これらのファイルをmainブランチにマージさせた後に、ProductionのEnvironmentにおいて、以下のようなジョブをmodel_a
・model_b
・model_c
ごとに定義し、それぞれのジョブを一度実行しておきます。
- 例:
model_a
用のジョブ
最後に、CI Jobsの設定をしておきます。基本的にデフォルトの設定のまま変更していません。
新しいモデルを開発しCI Jobsの挙動を確かめてみる
ここまでの準備を行った上で、新しいmodel_d
を追加してプルリクエストを発行したときに、どのようにCI Jobsが動くのかを確かめてみます。
すると、model_d
だけをビルドするCI Jobsが実行されました! 「対象のEnvironment全てのジョブをまとめたstateと比較」 している、ということがわかりましたね。
参考情報
実は公式ドキュメントにも下図のように記載がありました。以前は特定のジョブのstateとの比較しかできなかったようですが、現在は指定したEnvironmentの全てのDeploy Jobsを考慮したstateの比較が行えると記述されています!