0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【データ基盤構築/dbt】ジョブを実行した際に、ジョブ内の「データに差分があるモデル」だけ実行する

Posted at

今回の課題

dbtにてジョブを実行すると、実行する度に作成した全てのmodelに処理が走る。
実行する必要の無いmodelにも処理が走ってしまうため、クエリリソースを余分に多く消費してしまうという課題を感じていた。

dbtについての記事を読み漁っていたところ、
差分データが存在するモデルだけを実行するCIジョブの設定ができるということが分かったため、
その方法を試してみた。

※参考記事:dbt CloudにおけるCIについて

試してみた手順

手順1)本番デプロイ用のジョブを作成して一回実行しておく

こちらを実施することで、Artifactsが生成される。
ここで生成されたArtifactsと、この後の行程で生成するArtifactsの差分を確認して、
差分のあったモデルだけを実行するジョブを作成することができる。というイメージ。!

手順2)ジョブの編集画面を開く

この画面にて、色々と設定をしていく。
InkedaaaaInked9a3ca1957ab195295c0300960ebe3df8.jpg

手順3)Defer to previous run state?の設定

Defer to previous run state?を、Self: [ジョブ名]([環境名])に設定する。
これによって、手順1) にて生成したArtifactと、次回のジョブ実行時に生成されるArtifactの差分を確認できるようになる。
Inked286fe5b2573b2765d9e62751f20f3cb2.jpg

手順4)Commandsの設定

設定画面のCommandsに、--select state:modified+を指定しておく。
0a59cd90ecb11d3829da72aeee524069.png

こちらを実施することで下記が可能になる。

  • state:modifiedにより、Defer to previous run state?で設定したジョブと差分があるmodelだけを実行対象とする
  • 末尾に+をつけることで、差分があったmodelより下流に位置するmodelも全て実行する。

以上で、差分のあるモデルだけが実行されるように設定ができた。

実際にジョブを実行してみた

まず、差分が無い状態でジョブを実行してみた

dbt buildのログの中に、下記の記述があった。
state:modified+はどのノードにもマッチしません。とのことで、
差分データが無かったため、ジョブを実行してdbt buildが実行されたが、どのモデルにも処理が走らなかった様子。

2023-03-07 00:24:34.591773 (MainThread): 00:24:34  The selection criterion 'state:modified+' does not match any nodes

差分のデータを追加してジョブを実行してみた

特定のmodelのクエリにカラムを追加して、差分データを追加してみた結果、
そのmodelだけ実行されていた。

以上のような結果となり、無事差分データがあるモデルだけが実行されることを確認することができた。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?