使用dbt Jinja获取Select查询结果时遇语法错误求助
解决方案
核心问题:你把
statement/load_result这类Jinja控制流写到了普通表模型文件里,dbt的表模型只允许返回单一SELECT语句来生成表,不支持这类宏调用逻辑。报错行号是dbt渲染Jinja为最终SQL后的行号,不是你原文件的行号,所以才会出现行号不匹配的情况。正确处理方式:
- 若要处理查询结果,把这段逻辑放到dbt宏文件中(macros目录下的.sql文件),示例代码:
{% macro get_energy_dataset() %} {%- call statement('all', fetch_result=True) -%} select * from {{ source("energy_sellers", "energy") }} {%- endcall -%} {%- set all_data = load_result('all') -%} {{ return(all_data) }} {% endmacro %}之后可以在其他模型或dbt命令中调用这个宏来获取结果。
2. 如果你只是要基于这个source创建表模型,直接保留select * from {{ source("energy_sellers", "energy") }}即可,不需要用statement和load_result。
内容的提问来源于stack exchange,提问作者david backx
相关产品推荐
相关产品推荐

