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

