[新機能]dbt CloudのCI Jobでdbt Semantic Layerに関連するオブジェクトのチェックも出来るようになりました
さがらです。
dbt Cloudの2024年7月の新機能として、CI Jobでdbt Semantic Layerに関連するオブジェクトのチェック(validation)も出来るようになりました。
New: Introduced Semantic validations in CI pipelines. Automatically test your semantic nodes (metrics, semantic models, and saved queries) during code reviews by adding warehouse validation checks in your CI job using the dbt sl validate command. You can also validate modified semantic nodes to guarantee code changes made to dbt models don't break these metrics. Refer to Semantic validations in CI to learn about the additional commands and use cases.
この機能を実際に試してみたので、本記事でまとめてみます。
設定
まず、dbt CloudのCI Jobを設定する必要があります。CI Jobの設定については下記のブログが参考になると思います。
この上で、下記ドキュメントの「Use cases」で「recommended」となっているdbt sl validate --select state:modified+
コマンドをCI Jobに追加します。これで差分があったオブジェクトでのみ、CIの処理が動くようになります。
挙動を確かめてみた
ということで、実際にCI Jobの挙動を確かめてみます。
上流に位置するModelの内容を変更した場合
Semantic Modelとして参照されているcustomers.sql
について、Metricsにも使用されているcount_lifetime_orders
というカラムをコメントアウトしてみます。
この状態で、Pull Requestを作成すると、下図のようにCI Jobが動きました。
dbt sl validate --select state:modified+
の内容を見ると、customers.sql
を変更したため、customers.yml
で定義しているsemantic_models
とmetrics
について検知がされたようです。(何度か試していますが、saved_queries
は都度対象のdbt projectで定義しているすべてのsaved_queries
が検知されるようです。)
また、実際に接続先のDWH上ではどのようなクエリが動いているのかを見ると、下図のようにEXPLAIN文が実行されていました。実行計画がちゃんと作れるかどうかを見て、バリデーションを行っているようです。(ただ、実際にエラーとなったMetricsについてのEXPLAIN文の実行履歴がなく…ちょっと挙動がわからないところは正直あります。)
Metricsの定義だけを変更した場合
average_order_value
というMetricsの計算式を変更した場合にどのような挙動となるかを確認してみます。
Pull Requestを作ると下図のようにCI Jobが動きます。
dbt sl validate --select state:modified+
の内容を見ると、変更したMetricsについては検知されませんでした。基本的には、Modelの内容を変更した場合に動作するCIとなっているようです。
最後に
dbt Cloudの2024年7月の新機能として、CI Jobでdbt Semantic Layerに関連するオブジェクトのチェック(validation)が出来るようになったので試してみました。
私が検証した範囲ではCIの処理としてEXPLAIN文が実行されるだけでしたので、DWHのリソースのことも気にせずに使える機能だと感じました!dbt Semantic Layerを使っている方は、ぜひ活用してみてください。