✅
dbt-checkpointを導入検討してみる
概要
この記事ではCIへの導入検討のためにdbtプロジェクトのチェックツールであるdbt-checkpointのgithubリポジトリを読み、できることをざっくりまとめています。筆者はBigQueryとdbt coreを使っていて、github actionsでCIを整備しているのでそれらのツールを使う前提で書いています。
dbt-checkpointとは
dbt-checkpointは、dbtプロジェクトの品質を維持するためのツールです。dbtは便利なツールですが、モデル、ソース、マクロの数が増えると、各開発者が一貫した品質を保つのが難しくなります。たとえば、YAMLファイルのプロパティにカラムを追加し忘れたり、テーブルやカラムの説明を記載し忘れたりすることがあります。これらを手動でチェックするのは手間がかかり、レビューアーの負担が増え、誤りを見逃したり、低品質なコードがデプロイされてしまうリスクが高まります。チェック作業を自動化し、コードレビューやリリースプロセスを効率化するために、dbt-checkpointは以下のようなさまざまなフックを提供してくれています。
モデルやソースのカラムに説明があるかをチェックする
モデルにプロパティファイルやテストが含まれているかをチェックする
スクリプト内で正しいマクロが使われているかチェックする
dbt-checkpointは、コミュニティ主導のオープンソースプロジェクトとして開発されています。githubリポジトリはこちら
期待していたこと
dbt compileコマンドやdbt parseコマンドやyaml lintなどをCIに組み込むことでSQLファイルの構文エラーやYAMLファイルの構文エラーを検知することができることは知っていましたが、column descriptionの未記入やtestの記述漏れなど構文エラー以上コードチェックをするツールはこれまで知らなかったかつコードを0から書くのは大変だったのでdbt-checkpointをCIに組み込むことでシュッと可能になったらとても楽でありがたいなという気持ちでした。
できること
column descriptionの未記入はcheck-source-columns-have-descでチェックでき、testの記述漏れはcheck-model-has-testsやcheck-source-has-testsでチェックできそうでした!🎉
それ以外にもmacroやmodelのdescriptionの有無などもチェックできるため、CIに仕込めばdescriptionの記入を強制することもできそうです(過激派)
他にも機能はもりもりですが、一旦自分はcheck-source-columns-have-descあたりをCIに組み込むところからはじめてみようかなと思います!
ということでやりたいことはできそうなのでdbt-checkpoint導入してみようと思います!すでにdbt compileやdbt parseはCIに組み込んでいるのでdbt-checkpointを追加で取り入れることでさらにdbtプロジェクトの頑健性を高めることができそうです!
補足
dbt-checkpointが提供しているhook一覧
Model checks:
check-column-desc-are-same
check-column-name-contract
check-model-columns-have-desc
check-model-has-all-columns
check-model-has-contract
check-model-has-constraints
check-model-has-description
check-model-has-meta-keys
check-model-has-labels-keys
check-model-has-properties-file
check-model-has-tests-by-name
check-model-has-tests-by-type
check-model-has-tests-by-group
check-model-has-tests
check-model-name-contract
check-model-parents-and-childs
check-model-parents-database
check-model-parents-name-prefix
check-model-parents-schema
check-model-tags
check-model-materialization-by-childs
Script checks:
check-script-semicolon
check-script-has-no-table-name
check-script-ref-and-source
Source checks:
check-source-columns-have-desc
check-source-has-all-columns
check-source-table-has-description
check-source-has-freshness
check-source-has-loader
check-source-has-meta-keys
check-source-has-labels-keys
check-source-has-tests-by-group
check-source-has-tests-by-name
check-source-has-tests-by-type
check-source-has-tests
check-source-tags
check-source-childs
Macro checks:
check-macro-has-description
check-macro-arguments-have-desc
Modifiers:
generate-missing-sources
generate-model-properties-file
unify-column-description
replace-script-table-names
remove-script-semicolon
dbt commands:
dbt-clean
dbt-compile
dbt-deps
dbt-docs-generate
dbt-parse
dbt-run
dbt-test
dbt checks:
check-database-casing-consistency
参考
Read next
Loading recommendations...