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

使用dbt-utils的run_query宏出现语法错误求助

问题排查:dbt run_query 执行时触发数据库语法错误

问题重现

  • 编写的模型代码:
-- models/foo.sql
{% if execute %}

    {% set results = run_query('select 1 as id') %}
    {% do results.print_table() %}

{% endif %}
  • 执行后报错:
Database Error in model testcard_id_audit (models/audit/foo.sql)
  syntax error at or near ")"
  LINE 13:   );
  • 所有查询都会触发该错误。

环境版本信息

  • dbt版本:
dbt --version

Core:
  - installed: 1.7.10
  - latest:    1.7.10 - Up to date!

Plugins:
  - postgres: 1.7.10 - Up to date!
  • dbt-utils版本:
- package: dbt-labs/dbt_utils
  version: 0.9.6

问题原因及解决方案

错误核心原因:模型文件必须输出有效的SQL语句。run_query是dbt编译/执行阶段运行的Jinja函数,但模型本身需要生成可被数据库执行的SQL代码。当前代码仅包含Jinja逻辑,未输出任何SQL,dbt会自动补全空的();,导致PostgreSQL语法报错。

解决方法1:给模型添加有效SQL

在现有Jinja代码后补充一条合法SQL:

-- models/foo.sql
{% if execute %}
    {% set results = run_query('select 1 as id') %}
    {% do results.print_table() %}
{% endif %}

-- 必须保留的有效SQL语句
select 1 as dummy;

解决方法2:改用宏实现测试

若仅需测试run_query功能,建议将逻辑放到宏文件中(宏无需强制输出SQL):

-- macros/test_run_query.sql
{% macro test_run_query() %}
    {% if execute %}
        {% set results = run_query('select 1 as id') %}
        {% do results.print_table() %}
    {% endif %}
{% endmacro %}

通过命令行执行宏:

dbt run-operation test_run_query

内容的提问来源于stack exchange,提问作者Vincent Claes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:24:59