You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dbt时如何在YAML文件中调用Jinja自定义宏?

dbt YAML配置调用自定义宏提示“test_macro is undefined”的解决办法

问题原因

不是YAML文件不支持自定义宏,而是你的宏没有被dbt加载到可用的上下文环境中。dbt对宏的加载有固定规则:只有放在项目根目录下的macros/文件夹内的.sql文件中的宏,才会被dbt自动识别并加载,才能在模型YAML、SQL文件里调用。如果你的宏写在其他位置,dbt找不到就会报“undefined”错误。

解决步骤

  1. 存放宏到指定目录
    把你的test_macro宏保存到macros/文件夹下的任意.sql文件中,比如创建macros/env_tag_macro.sql,内容如下:

    {% macro test_macro(target) %}
      {%- if target.name == "dev" -%} DEV
      {%- elif target.name == "prod" -%} PROD
      {%- else -%} invalid
      {%- endif -%}
    {% endmacro %}
    
  2. 在YAML中正常调用
    之后再在模型配置YAML里调用宏就可以正常识别了:

    models:
      - name: test_view
        description: "test"
        config:
          meta:
            database_tags:
              ACCOUNT_OBJECTS.TAGS.ENV: {{ test_macro(target) }}
    

替代方案:直接内嵌Jinja逻辑

如果不想单独写宏,也可以直接在YAML里内嵌Jinja判断逻辑,省去单独维护宏文件的步骤:

models:
  - name: test_view
    description: "test"
    config:
      meta:
        database_tags:
          ACCOUNT_OBJECTS.TAGS.ENV: {% if target.name == "dev" %}DEV{% elif target.name == "prod" %}PROD{% else %}invalid{% endif %}

内容的提问来源于stack exchange,提问作者TheLoneGrape

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:05:26