我在我的
dbt_project.yml
中定义了我想要引用的变量。
name: "snowflake_dwh"
version: "1.0.0"
config-version: 2
profile: "default"
vars:
test_results_schema: dbt_test_history
clean: "{% if target.name == 'prod' %} CLEAN {% else %} {{ target.database }} {% endif %}"
custom: "{% if target.name == 'prod' %} CUSTOM {% else %} {{ target.database }} {% endif %}"
test_schema: "{% if target.name == 'prod' %} DBT_TEST_RESULTS {% else %} DBT2_TEST_RESULTS {% endif %}"
seeds:
data:
+database: var.custom # -----> DOESN'T WORK
+schema: seed_data
+full_refresh: true
snapshots:
+target_schema: dbt_snapshots
+target_database: var.clean # -----> DOESN'T WORK
tests:
snowflake_dwh:
clean:
+database: var.clean # -----> DOESN'T WORK
custom:
+database: var.custom # -----> DOESN'T WORK
+store_failures: true
+schema: dbt_test_results
on-run-start:
- '{{ remove_empty_tables(var("clean"), var("test_schema")) }}' # -----> WORKS
我想更改此设置以使其正常工作,因为现在我收到错误了
Runtime Error
Database error while listing schemas in database "var.clean"
Database Error
002043 (02000): SQL compilation error:
Object does not exist, or operation cannot be performed.
这看起来像是将其作为字符串而不是变量读取。
我尝试更改为这种语法
...
target_database: "{{var('clean')}}"
...
但这会引发不同的错误
Compilation Error
Could not render {{var('clean')}}: Required var 'clean' not found in config:
Vars supplied to <Configuration> = {}
我还查看了 dbt 文档 here 但那里没有示例。也在这里查看了其他问题,但没有任何效果。
tl;dr:访问 yml 文件中定义的变量的语法是什么?
目前在 dbt 1.4 中这是不可能的。请参阅 https://github.com/dbt-labs/dbt-core/discussions/6170 和 https://github.com/dbt-labs/dbt-core/issues/4873
这个问题有什么解决办法吗?我计划使用 Node.FQN 进行尝试,其中基于模型从代码运行的文件夹将识别架构名称,但不确定这是否有效。