dbt调用Snowflake含空格列出现SQL编译错误问题咨询
解决dbt查询Snowflake带空格列的编译错误
问题原因
你在dbt模型里用了HTML转义字符"来表示双引号,但dbt编译时会把这些转义字符当成普通字符串处理,导致执行语句里出现'\"Sales Date\"'这类带单引号的无效标识符,而非正确的双引号包裹列名"Sales Date"。虽然直接运行dbt编译后的SQL能正常执行,但dbt内部的预处理逻辑错误解析了转义字符,引发了编译报错。
解决方案
方案1:直接用双引号并配置quoting
修改模型代码,直接用双引号包裹带空格的列名:
SELECT * FROM {{ source('amc_dsp_idn', 'vw_f_amc_idn_daily_sales') }} WHERE YEAR("Sales Date") >= 2024
同时在dbt_project.yml中配置源表的标识符引用规则,确保dbt保留双引号:
sources: - name: amc_dsp_idn tables: - name: vw_f_amc_idn_daily_sales quoting: identifier: true
方案2:使用dbt内置identifier()函数(推荐)
用dbt的identifier()函数包裹带空格的列名,它会自动适配数据库的标识符规则,无需手动处理引号:
SELECT * FROM {{ source('amc_dsp_idn', 'vw_f_amc_idn_daily_sales') }} WHERE YEAR({{ identifier('Sales Date') }}) >= 2024
补充说明
直接运行编译后的SQL能成功,是因为此时转义字符已经被处理成正确的双引号;但dbt执行时的预处理阶段错误解析了",将其当成字符串的一部分,因此触发无效标识符错误。
内容的提问来源于stack exchange,提问作者BimoS
相关产品推荐
相关产品推荐

