Skip to content

项目变量

dbt提供了一种机制,变量,提供数据到模型的编译。亦是可以使用于时区配置,避免写死表名称,或者以其它方式向模型提供数据以配置如何编译它们。

要在模型、hook或宏中使用变量,请使用{{ var('...') }}函数。关于var函数的更多信息可以在这里找到

变量可以通过两种方式定义:

  1. dbt_project.yml文件中
  2. 在命令行上

dbt_project.yml中定义变量

要在dbt项目中定义变量,请在dbt_project.yml文件中添加vars配置。这些vars的作用域可以是全局的,也可以是导入到项目。

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:
    ...

在命令行上定义变量

dbt_project.yml文件是定义很少使用的变量的好地方, 其他类型的变量,如日期范围,会经常发生变化。运行dbt定义(或覆盖)变量,使用--vars命令:

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

--vars参数接受一个YAML字典作为命令行上的字符串。YAML很方便,因为它不需要像json那样进行严格的引用。

以下两项均有效且等效:

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

如果只设置了一个变量,括号是可选的,例如:

$ dbt run --vars 'key: value'

你中以在这里查看关于YAML定义字典的更多信息。

变量优先级

--vars命令行参数定义的变量覆盖变量,在dbt_project.yml文件中定义。它们在全局范围内可访问项目中包含的所有包

变量声明的优先级顺序如下(最高优先级优先):

  1. 在命令行上用--vars定义的变量。
  2. dbt_project.yml文件中包范围的变量声明
  3. dbt_project.yml文件中的全局变量声明。
  4. 变量的默认参数(如果提供了一个)。

如果dbt在检查了这四个位置后无法找到变量的定义,那么将引发编译错误。