dbt Cloudで差分があるmodelだけを実行&テストするCIジョブの設定が更に簡単になったので試してみた

2024.02.09

さがらです。

dbt Cloudで差分があるmodelだけを実行&テストするCIジョブについて、以前下記のブログを書いていました。

しかし2023年9月のアップデートで、新しく「continuous integration(CI) jobs」という新しいタイプのジョブが追加され、これを用いるとより簡単にCIジョブの定義が可能となります。

この新しいCIジョブの定義について試してみたので、本記事で内容をまとめてみます。

事前準備

これまでのCIジョブと同じように、差分だけを実行するCIジョブを設定するには、Set deployment typeProductionとなるEnvironmentのジョブを設定し、一度でも実行しておく必要があります。

後で設定するCIジョブは、このProductionを設定したEnvironmentのジョブにより生成されるArtifactsとの差分を確認する必要があるからです。

実際に私は下図のように設定しました。

  • Environment

  • ジョブ

CIジョブの設定

続いて、CIジョブの設定をしていきます。

Productionを設定したEnvironmentにおいて、+ Create jobを押し、Continuous integration jobを押します。

あとは、Job nameを変更して右上のSaveを押せば基本的にはOKです!理由としては、デフォルトで実行するdbtコマンドはdbt build --select state:modified+が入っており、Triggered by pull requestsにもデフォルトでチェックが入っているためです。

CIジョブが想定通りに動くか確認してみた

ということで実際にCIジョブが想定通りに動くかを見てみます。

下図のような依存関係において、stg_customers.sqlだけを編集してコミットしてみます。

この上でGitHubでPull Requestを作成すると、下図のようにdbt Cloudのcheck処理が走ります。

dbt Cloudを見ると、下図のようにCIジョブが走っていました。

このCIジョブによりSnowflakeでは専用のスキーマが作られ、編集を行ったstg_customersビューとその下流に位置するModelであるcustomersテーブルだけが作られています。編集を行ったModelとその下流に位置するModelだけが作られているため、想定通りの挙動ですね!

最後に

2023年9月のアップデートで新しく追加された「continuous integration(CI) jobs」を試してみました。

とても簡単にCIを導入できるため、dbt Cloudを導入されている場合にはぜひ試してほしいです!