DBT宏编译未返回SQL字符串,咨询能否传递查询字符串?
DBT宏返回空结果的问题修复及查询字符串传递可行性
问题原因分析
你的宏和模型存在3个关键问题:
- 宏定义语法错误:开头缺少
%,正确写法应为{% macro my_macro(value) %} - 宏内部逻辑错误:
return(query)放在了{% set query %}块内部,导致变量未完成赋值就返回,最终得到空内容 - 模型SQL语法不完整:
where A in (...)缺少闭合括号
修正后的代码
宏文件my_macro.sql
{% macro my_macro(value) %} {% set query %} select A from {{ value }} {% endset %} {{ return(query) }} {% endmacro %}
模型文件model.sql
select * from B where A in ({{ my_macro('target_table') }})
编译后正确输出
select * from B where A in (select A from target_table)
核心问题解答
DBT中完全可以传递查询字符串,宏的核心作用就是动态生成并返回SQL片段,只要语法和逻辑正确,就能实现你想要的效果。
内容的提问来源于stack exchange,提问作者John Paul
相关产品推荐
相关产品推荐

