(Last updated on )
dbt のプロジェクトでよく使うコマンド
dbt のプロジェクトでよく使うコマンド
想定読者
- とりあえず、
dbtを使ってクエリを実行したい人 dbtやSQLFluff、dbt-osmosisの使い方を覚えていない人
前提
<model_name>=models/*のファイル名- 例:
models/marts/hogehoge/dim_accounts.sqlであれば、dim_accounts
- 例:
<model_path>=models/*のパス名- 例:
models/marts/hogehoge/dim_accounts.sqlであれば、models/marts/hogehoge/dim_accounts.sql
- 例:
モデルの作成
model_name のモデルが参照しているすべてのモデルを含めて BigQuery に反映
モデルのコンパイルも行われる。
$ dbt run -s +<model_name>
main ブランチから追加・変更したモデルが参照しているすべてのモデルを含めて BigQuery に反映
$ dbt run -s $(git diff origin/main --diff-filter=d --name-only | grep -e '^models/.*\.sql' -e '^analyses/.*\.sql' | sed 's/^/+/g')
テストの実行
model_name のテストを実行
$ dbt test -s <model_name>
main ブランチから追加・変更したモデルのテストを実行
big_model のテストを実行すると BigQuery の料金が高くなるので除外。
レコード数が多い GA4 などのテーブルに対して、big_model のタグを付与している。
$ dbt test -s $(git diff origin/main --diff-filter=d --name-only | grep -e '^models/.*\.sql') --exclude +tag:big_model
main ブランチから追加・変更したモデルの更新とテストを実行
これまでに説明した dbt run と dbt test を実行。
dbt run:mainブランチから追加・変更したモデルが参照しているすべてのモデルを含めてBigQueryに反映dbt test:mainブランチから追加・変更したモデルのテストを実行
$ dbt run -s $(git diff origin/main --diff-filter=d --name-only | grep -e '^models/.*\.sql' -e '^analyses/.*\.sql' | sed 's/^/+/g') && dbt test -s $(git diff origin/main --diff-filter=d --name-only | grep -e '^models/.*\.sql') --exclude +tag:big_model
モデルのコンパイル
target/compiled/<repository_name>/models/* にコンパイル済みのクエリが作成される。
モデルが参照しているすべてのモデルを含めてコンパイルする。
$ dbt compile -s +<model_name>
Lint の自動修正・実行
Linter は、SQLFluff を利用している。
model_path のクエリを Lint で自動修正
$ sqlfluff fix -f <model_path>
main ブランチから追加・変更したモデルのクエリを Lint で自動修正
$ sqlfluff fix -f $(git diff origin/main --diff-filter=d --name-only | grep -e '^models/.*\.sql' -e '^analyses/.*\.sql')
model_path のクエリの Lint を実行
$ sqlfluff lint <model_path>
main ブランチから追加・変更したモデルのクエリの Lint を実行
$ sqlfluff fix で修正できなかったモデルがあった時に実行して、ルールに違反するモデルを確認。
$ sqlfluff lint $(git diff origin/main --diff-filter=d --name-only | grep -e '^models/.*\.sql' -e '^analyses/.*\.sql')
dbt のドキュメントを確認
dbt docs のドキュメントを参照元のデータで埋める
$ dbt-osmosis yaml refactor --project-dir ./ --profiles-dir ./.dbt --fqn staging.dataset_name.stg_dataset_name__object_name
dbt docs の確認
現在の dbt のドキュメントを確認。
モデルを探すとき、モデルの定義・クエリを確認するときに利用すると便利です。
コンパイル -> ドキュメント生成 -> サーバーを起動 の順で実行。
$ dbt compile && dbt docs generate && dbt docs serve
main ブランチから追加・変更したモデルの一覧
$ git diff origin/main --diff-filter=d --name-only | grep -e '^models/.*\.sql' -e '^analyses/.*\.sql'
dbt の環境が壊れた時に実行
dbt clean を実行すると dbt_project.yml で指定している clean-targets のディレクトリがすべて削除される。
clean-targets のディレクトリの削除 -> dbt の package のインストール の順で実行。
$ dbt clean && dbt deps
