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

DBT外部Schema YML调用宏配置Redshift Spectrum S3路径编译报错求解

错误原因

  • Jinja模板嵌套非法:你在YAML的location字段中嵌套了两层{{ }},{{ s3_prefix({{ env_var('ENV') }}) }}的写法不符合Jinja语法,{{ }}内部调用函数时,参数不需要额外加{{ }}包裹。
  • 宏变量赋值语法错误:你编写的s3_prefix宏中直接写prefix_string = "xxx"属于无效语法,Jinja定义变量必须使用{% set %}标签。

修复方案

方案1:修复现有代码(最小改动)

首先修正s3_prefix宏的语法:

{% macro s3_prefix(env_var) %}
{% if env_var == "prod" %}
    {% set prefix_string = "prefix_prod" %}
{% else %}
    {% set prefix_string = "prefix_non_prod" %}
{% endif %}
{{ return(prefix_string) }}
{% endmacro %}

再修正YAML中的location字段写法:

location: "s3://{{ env_var('ENV') }}-temp-raw-s3/{{ s3_prefix(env_var('ENV')) }}/Visitor"

方案2:更简便的实现(无需单独定义宏)

直接在YAML中使用Jinja三元表达式完成逻辑判断,不需要额外维护宏代码,更简洁:

location: "s3://{{ env_var('ENV') }}-temp-raw-s3/{{ 'prefix_prod' if env_var('ENV') == 'prod' else 'prefix_non_prod' }}/Visitor"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:36:03