如何引用dbt_project.yml中定义的变量

问题描述 投票:0回答:2

我在我的

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 文件中定义的变量的语法是什么?

yaml dbt
2个回答

0
投票

这个问题有什么解决办法吗?我计划使用 Node.FQN 进行尝试,其中基于模型从代码运行的文件夹将识别架构名称,但不确定这是否有效。

© www.soinside.com 2019 - 2024. All rights reserved.