如何在 dbt 宏中使用变量

cod*_*ode 3 dbt

我正在尝试在宏中使用 dbt run 命令中传递的变量。我该如何使用它

    {% set override_schema_name = vars('override_schema_name') %}


    {%- set default_schema = target.schema -%}
    {%- if custom_schema_name is none -%}

        {{ default_schema }}

    {%- else -%}

        {{ default_schema }}_{{  override_schema_name| trim }}

    {%- endif -%}

{%- endmacro %} 
Run Code Online (Sandbox Code Playgroud)

在此示例中,我正在运行 dbt run --vars '{"override_schema_name":"someschema"}',但这会引发变量未定义的错误。

tco*_*eer 5

您的代码中有一些错误:

  1. 访问变量值的宏名称是var, 不是vars。所以你的第一行应该是{% set override_schema_name = var('override_schema_name') %}

  2. 您应该在project.yml文件中声明任何变量,然后再在宏或项目中的其他位置使用它们:

name: my_dbt_project
version: 1.0.0

config-version: 2

# Define variables here
vars:
  override_schema_name: something
Run Code Online (Sandbox Code Playgroud)

var或者,您可以为宏中的调用提供默认值:

{% set override_schema_name = var('override_schema_name', target.schema) %}
Run Code Online (Sandbox Code Playgroud)

进行这些更改后,您的dbt run命令应该可以工作。

var文档: https: //docs.getdbt.com/reference/dbt-jinja-functions/var “使用变量”指南:https://docs.getdbt.com/docs/building-a-dbt-project/building-models /使用变量