项目变量
dbt提供了一种机制,变量,提供数据到模型的编译。亦是可以使用于时区配置,避免写死表名称,或者以其它方式向模型提供数据以配置如何编译它们。
要在模型、hook或宏中使用变量,请使用{{ var('...') }}函数。关于var函数的更多信息可以在这里找到。
变量可以通过两种方式定义:
- 在
dbt_project.yml文件中 - 在命令行上
在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命令:
--vars参数接受一个YAML字典作为命令行上的字符串。YAML很方便,因为它不需要像json那样进行严格的引用。
以下两项均有效且等效:
$ dbt run --vars '{"key": "value", "date": 20180101}'
$ dbt run --vars '{key: value, date: 20180101}'
如果只设置了一个变量,括号是可选的,例如:
你中以在这里查看关于YAML定义字典的更多信息。
变量优先级¶
用--vars命令行参数定义的变量覆盖变量,在dbt_project.yml文件中定义。它们在全局范围内可访问项目中包含的所有包
变量声明的优先级顺序如下(最高优先级优先):
- 在命令行上用
--vars定义的变量。 dbt_project.yml文件中包范围的变量声明dbt_project.yml文件中的全局变量声明。- 变量的默认参数(如果提供了一个)。
如果dbt在检查了这四个位置后无法找到变量的定义,那么将引发编译错误。