📘

【dbt Docs】Building a dbt Project - Models - Using variables

2022/03/11に公開

Using variables

https://docs.getdbt.com/docs/building-a-dbt-project/building-models/using-variables

変数は、モデルやフック、マクロで使うことができ、{{ var('...') }} で使用できる。
2つの方法で定義できて

  1. dbt_project.yml
  2. コマンドライン

Defining variables in dbt_project.yml

dbt_project.ymlで、varsで定義することができる。グローバル変数として定義することも、特定のパッケージ内のみで使うスコープ変数にも定義できる。

dbt_project.yml
name: my_dbt_project
version: 1.0.0

config-version: 2

vars:
  # The `start_date` variable will be accessible in all resources
  start_date: '2016-06-01'

  # The `platforms` variable is only accessible to resources in the my_dbt_project project
  my_dbt_project:
    platforms: ['web', 'mobile']

  # The `app_ids` variable is only accessible to resources in the snowplow package
  snowplow:
    app_ids: ['marketing', 'app', 'landing-page']

models:
    ...

Defining variables on the command line

dbt_project.ymlでは、めったに変更されない変数を定義するのに最適。
日付範囲など頻繁に変更する変数に関しては、コマンドラインで設定(上書き)するのが良い

$ dbt run --vars '{"key": "value"}'

$ dbt run --vars '{"key": "value", "date": 20180101}'
$ dbt run --vars '{key: value, date: 20180101}'
$ dbt run --vars '{"key": "value", "date": 20180101}'
$ dbt run --vars '{key: value, date: 20180101}'

Variable precedence

--vars コマンドライン引数で定義された変数は、dbt_project.ymlファイルで定義された変数を上書きします。それらはグローバルスコープであり、プロジェクトに含まれるすべてのパッケージにアクセスできます。

変数宣言の優先順位は次のとおりです(優先順位が最も高いものが最初)。

  1. コマンドラインで。を使用して定義された変数--vars。
  2. dbt_project.ymlファイル内のパッケージスコープの変数宣言
  3. dbt_project.ymlファイル内のグローバル変数宣言。
  4. 変数のデフォルト引数(提供されている場合)。

これらの4つの場所をチェックした後、dbtが変数の定義を見つけることができない場合、コンパイルエラーが発生します。

Discussion