【dbt】dbt ~ 変数 var / env_var ~

◾️はじめに

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