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

使用sqlfmt格式化含Jinja模板的SQL报错:无法解析位置200处代码

问题

我正在使用sqlfmt自动格式化带有Jinja模板的SQL代码,编写了一段替换两列中引号的SQL语句:

select
    replace(replace(fruit_name, '''', ''), '"', '') as fruit_name_without_quotes,
    replace(replace(fruit_group, '''', ''), '"', '') as fruit_group_without_quotes
from 
    {{ ref("dim_fruit") }}

执行sqlfmt时出现错误:

sqlfmt encountered an error: Could not parse SQL at position 200: '") }}'

仅选择第一列时可正常运行,尝试用-- fmt: off禁用sqlfmt也无效,请问该如何解决?

解决方法
  • 修正Jinja模板的引号写法:sqlfmt对HTML转义的"解析存在兼容问题,直接把{{ ref("dim_fruit") }}改成{{ ref('dim_fruit') }}即可,SQL语句里的'''(用两个单引号转义单个单引号)是正确写法,无需修改。
  • 简化替换逻辑(可选):用translate函数替代嵌套的replace,既能减少代码层级,也能避免sqlfmt的解析歧义,示例:
    select
        translate(fruit_name, '''"', '') as fruit_name_without_quotes,
        translate(fruit_group, '''"', '') as fruit_group_without_quotes
    from 
        {{ ref('dim_fruit') }}
    
  • 升级sqlfmt版本:如果以上方法无效,尝试升级sqlfmt到最新版本,旧版本对Jinja模板的解析兼容性较差,可能存在已知bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:59:50