dbt Cloudで複数のジョブにmodel実行を分けているときのCI Jobsの挙動を確認してみた

dbt Cloudで複数のジョブにmodel実行を分けているときのCI Jobsの挙動を確認してみた

Clock Icon2025.02.24

さがらです。

dbt Cloudで複数のジョブにmodel実行を分けているときのCI Jobsの挙動を確認してみたので、本記事でその内容をまとめてみます。

検証の狙い

なぜこんな検証を行うのかというと、CI Jobsはstateを比較するdbt build --select state:modified+というコマンドで基本的に動かしますが、このstateの比較を行う際、以下のどちらの挙動となるかが不明確だったためです。

  • 対象のEnvironment全てのジョブをまとめたstateと比較
  • 対象のEnvironmentでの最後のジョブのstateと比較

事前準備

まず、下図のようにチュートリアル定番のjaffle_shopのmodelを3つ定義済みであるとします。

2025-02-24_09h20_22

この上で、models/testというフォルダ内で以下の3モデルを定義します。クエリの内容はとてもシンプルで、a・b・cの文字列を出力するだけのselect文となっています。

2025-02-24_09h22_18

  • 例:test/model_a.sql
select 'a' as col1

これらのファイルをmainブランチにマージさせた後に、ProductionのEnvironmentにおいて、以下のようなジョブをmodel_amodel_bmodel_cごとに定義し、それぞれのジョブを一度実行しておきます。

  • 例:model_a用のジョブ

2025-02-24_09h36_54

2025-02-24_09h52_49

最後に、CI Jobsの設定をしておきます。基本的にデフォルトの設定のまま変更していません。

2025-02-24_09h43_50

新しいモデルを開発しCI Jobsの挙動を確かめてみる

ここまでの準備を行った上で、新しいmodel_dを追加してプルリクエストを発行したときに、どのようにCI Jobsが動くのかを確かめてみます。

2025-02-24_10h00_33

すると、model_dだけをビルドするCI Jobsが実行されました! 「対象のEnvironment全てのジョブをまとめたstateと比較」 している、ということがわかりましたね。

2025-02-24_10h03_17

2025-02-24_10h03_40

参考情報

実は公式ドキュメントにも下図のように記載がありました。以前は特定のジョブのstateとの比較しかできなかったようですが、現在は指定したEnvironmentの全てのDeploy Jobsを考慮したstateの比較が行えると記述されています!

2025-02-24_10h05_48

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.