【dbt】dbt で生成されるSQL文を確認する

■ はじめに

 デバッグするために
dbt の SQL文を確認する必要ができたので
予習しておく

目次

【1】準備:環境設定
 1)DB:PostgreSQL
 2)DBTおよびDBTプロジェクト作成
【2】SQL文確認方法
 1)Log Level(--log-level debug)
 2)SQLファイル出力先 target/run
【3】補足1:dbt compileコマンド
【4】補足2:--log-level-fileオプション
【5】補足3:--debugオプション(-d)

【1】準備:環境設定

1)DB:PostgreSQL

* 以下の関連記事を参考にPostgreSQLを構築

Docker compose ~ Pgweb/pgAdmin ~
https://dk521123.hatenablog.com/entry/2023/08/10/111919

2)DBTおよびDBTプロジェクト作成

* 以下の関連記事を参考にDBTおよびDBTプロジェクト作成

dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/30/151003

【2】SQL文確認方法

* dbt run --log-level DEBUGを実行する
 => 標準出力としてSQLが出力される

https://docs.getdbt.com/reference/commands/run
https://docs.getdbt.com/reference/global-configs/logs#log-level

* dbt run の詳細は、以下の関連記事を参照のこと

dbt ~ dbt CLI
https://dk521123.hatenablog.com/entry/2024/07/21/234811

コマンド例

# dbt run --log-level DEBUG
dbt run --log-level DEBUG > output.txt

output.txt

[0m06:21:38  On model.users.users_model: /* {"app": "dbt", "dbt_version": "1.8.5", "profile_name": "users", "target_name": "dev", "node_id": "model.users.users_model"} */

  create view "sample"."hello"."users_model__dbt_tmp"
    
    
  as (
    select id, user_name from hello.users
  );
[0m06:21:38  SQL status: CREATE VIEW in 0.005 seconds

1)Log Level(--log-level debug)

https://docs.getdbt.com/reference/global-configs/logs#log-level

# dbt --log-level <LOG_TYPE (debug, info, warn, error, none)> run
dbt --log-level debug run

2)SQLファイル出力先 target/run

* dbt run (--log-level DEBUG オプションあるなし関わらず) を
 実行した際には、target/run配下にSQLが出力される

users/target/run/users/models/users/users_model.sql

  create view "sample"."hello"."users_model__dbt_tmp"
    
    
  as (
    select id, user_name from hello.users
  );

【3】補足:dbt compileコマンド

* dbt compileを実行した際には、
 target/compiled 配下にSQLが出力されるが
 実行される元となるSQL文が出力されているっぽい

https://docs.getdbt.com/reference/commands/compile

dbt compile

users/target/compiled/users/models/users/users_model.sql

select id, user_name from hello.users

【4】補足2:--log-level-fileオプション

使用上の注意:--log-level / --log-level-file との違い

* ログファイルと、コンソールに出力されるログ(stdout:標準出力)
 のログレベルは異なる

https://docs.getdbt.com/reference/global-configs/logs#log-level

より抜粋
~~~~~~
To set the file log level as a different value than the console,
 use the --log-level-file flag.

[訳]
ファイルのログレベルをコンソールとは異なる値に設定するには、
--log-level-fileフラグを使う。
~~~~~~
Options ログファイル 標準出力
--log-level 設定が反映される 設定が反映される
--log-level-file 設定が反映される 設定が反映されない

【5】補足3:--debugオプション(-d)

https://docs.getdbt.com/reference/global-configs/logs#debug-level-logging

より抜粋
~~~~~~
The DEBUG config redirects dbt's debug logs to standard output.
This has the effect of showing debug-level log information
 in the terminal in addition to the logs/dbt.log file.
This output is verbose.

The --debug flag is also available via shorthand as -d.

[訳]
DEBUG設定はdbtのデバッグログを標準出力にリダイレクトする。
これは、logs/dbt.logファイルに加えて、デバッグレベルのログ情報
 をターミナルに表示する効果がある(logs/dbt.log ファイルに加えて)。
この出力は冗長である。

debugフラグは-dという省略形でも使用できます。
~~~~~~

参考文献

https://zenn.dev/ishiki_a/scraps/4cd61dc2e07b0f
https://dev.classmethod.jp/articles/dbt-analyses/
https://qiita.com/dai_zamurai/items/c0f564d41be50b9dde3d

関連記事

dbt ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/06/30/000000
dbt ~ 環境設定編 ~
https://dk521123.hatenablog.com/entry/2023/12/16/152147
dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/30/151003
dbt ~ dbt CLI
https://dk521123.hatenablog.com/entry/2024/07/21/234811
pip install ライブラリ更新
https://dk521123.hatenablog.com/entry/2024/08/23/012045
dbt を v1.8 に更新後エラー
https://dk521123.hatenablog.com/entry/2024/08/24/002455
Docker compose ~ Pgweb/pgAdmin ~
https://dk521123.hatenablog.com/entry/2023/08/10/111919
Python with dbt ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/07/20/034930