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
相关产品推荐
相关产品推荐

