◾️はじめに
dbtの変数 var についてトラブルがあって 調べてみたのでまとめておく。 その中で、env_var()ってのも知ったので ついでにメモっておく
目次
【1】変数 - var() 1)参照方法 2)設定方法1 - dbt_project.ymlで設定 3)設定方法2 - コマンドライン引数で設定 4)設定した変数の優先順位 5)使用上の注意:変数が未設定の場合 【2】環境変数 - env_var() 1)参照方法 【3】Tips1:数値変換 - as_number 補足:as_bool / as_native
【1】変数 - var()
* dbtには、変数
https://docs.getdbt.com/reference/dbt-jinja-functions/var
1)参照方法
* {{ var('変数名') }}で参照する
例1:変数 event_type
SELECT * FROM events WHERE event_type = '{{ var("event_type") }}'
例2:デフォルト値
SELECT * FROM events WHERE event_type = '{{ var("event_type", "activation") }}'
2)設定方法1 - dbt_project.ymlで設定
* dbt_project.yml のvars 配下に設定する
https://docs.getdbt.com/reference/dbt-jinja-functions/dbt-project-yml-context
例:dbt_project.ymlで設定
# vars 配下に設定する name: my_dbt_project version: 1.0.0 config-version: 2 # Define variables here vars: # 全てのリソースからアクセス可能 event_type: activation start_date: '2016-06-01' # my_dbt_projectプロジェクトのみで使用 my_dbt_project: platforms: ['web', 'mobile'] # snowplow packageのみで使用 snowplow: app_ids: ['marketing', 'app', 'landing-page'] models: ...
3)設定方法2 - コマンドライン引数で設定
* dbt CLI の --vars によって設定する
例:コマンドラインの引数として設定
$ dbt run --vars '{"key": "value", "date": 20180101}' $ dbt run --vars '{key: value, date: 20180101}' # 変数が1つなら以下でも可能 $ dbt run --vars 'key: value'
4)設定した変数の優先順位
https://docs.getdbt.com/docs/build/project-variables#variable-precedence
によると以下のように記載されている(の日本語訳) 変数定義の優先順位は以下の通り(最優先順位は一番上) 1. --varsによるコマンドライン上で定義した変数 2. ルート dbt_project.yml 内のパッケージスコープで定義した変数 3. ルート dbt_project.yml 内のグローバル変数で定義した変数 4. パッケージのdbt_project.yml 内で定義した変数(もしノードで構成されている場合) 5. デフォルト引数で定義した変数(もしあれば)
5)使用上の注意:変数が未設定の場合
* 変数が設定されていない場合は、コンパイルエラーが起こる
【2】環境変数 - env_var()
* 環境変数を使用することも可能
https://docs.getdbt.com/reference/dbt-jinja-functions/env_var
1)参照方法
例:profiles.yml
profile: target: prod outputs: prod: # IMPORTANT: Make sure to quote the entire Jinja string here user: "{{ env_var('DBT_USER', 'admin') }}" password: "{{ env_var('DBT_PASSWORD') }}"
【3】Tips1:数値変換 - as_number
* フィルタ+as_number (or int)で数字に変換
例:profiles.yml
my_profile: outputs: dev: type: postgres port: "{{ env_var('PGPORT') | as_number }}" threads: "{{ env_var('THREDS') | int }}"
補足:as_bool / as_native
as_bool
* Boolean型に変換する
https://docs.getdbt.com/reference/dbt-jinja-functions/as_bool
models: my_project: for_export: enabled: "{{ (target.name == 'prod') | as_bool }}"
as_native
* ast.literal_eval に従って Python ネイティブ型 (set, list, tuple, dict など) に変換
https://docs.getdbt.com/reference/dbt-jinja-functions/as_native
* ast.literal_eval は、以下のサイト参照。
https://docs.python.org/ja/3.13/library/ast.html#ast.literal_eval
関連記事
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 ~ DB/Schema/Table の指定方法 ~
https://dk521123.hatenablog.com/entry/2024/09/29/185918
dbt ~ config ~
https://dk521123.hatenablog.com/entry/2025/05/11/024449
dbt ~ target ~
https://dk521123.hatenablog.com/entry/2025/05/10/232636
dbt CLI ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/07/21/234811