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

dbt post-hook调用宏传入list类型参数触发编译错误如何解决?

问题原因

  • 你在已经处于Jinja上下文的config块内部,给post-hook的值额外嵌套了一层带{{ }}的字符串,触发了Jinja的双层解析逻辑
  • 双层解析场景下,传入的列表字面量['foo', 'bar']的方括号语法无法被解析器正确识别,因此抛出函数调用表达式语法错误

解决方案

优先推荐直接给post_hook传入宏调用,不需要包裹字符串和额外的Jinja大括号(config本身就在Jinja上下文中可直接调用宏),示例代码如下:

{{
  config(
    materialized = 'table',
    post_hook = [ my_macro(this, 'my_str', ['foo', 'bar']) ]
  )
}}

SELECT * FROM muh_tayble;

如果你的场景必须使用字符串格式的hook写法,可以把列表参数先通过tojson序列化后传入,再在宏内用fromjson转回列表,示例如下:

模型侧代码

{{
  config(
    materialized = 'table',
    post-hook = "{{ my_macro(this, 'my_str', tojson(['foo', 'bar'])) }}"
  )
}}

宏侧代码

{% macro my_macro(relation, string, list_str) %}
{% set list = fromjson(list_str) %}
 BLAH
{% endmacro %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:27:04