hene

hene.dev

(Last updated on )

dbt のプロジェクトでよく使うコマンド

dbt のプロジェクトでよく使うコマンド

想定読者

  • とりあえず、dbt を使ってクエリを実行したい人
  • dbtSQLFluffdbt-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 rundbt 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 のディレクトリの削除 -> dbtpackage のインストール の順で実行。

$ dbt clean && dbt deps

参考

関連記事