DBT源标识符能否以数字开头?Snowflake SQL编译报错排查
问题解决:DBT引用数字开头的Snowflake表标识符
核心问题
你在模型代码调用source函数时,第二个参数未用单引号包裹,导致DBT错误解析表名,生成的SQL无法正确识别Snowflake中以数字开头的表标识符,最终触发编译错误。
修正步骤
1. 修正Staging模型代码
将原代码:
with unioned_archived_history_logs as ( select * from {{ source('emspdb_archive', s_2020_09_history_logs) }} )
修改为:
with unioned_archived_history_logs as ( select * from {{ source('emspdb_archive', 's_2020_09_history_logs') }} )
关键是给第二个参数s_2020_09_history_logs加上单引号——它是你在_sources.yml中定义的表name字段值,必须以字符串形式传递给source函数。
2. 保留现有_sources.yml配置
你的_sources.yml配置是正确的:identifier字段用双引号包裹"2020_09_history_logs",这会让DBT自动生成带双引号的SQL,符合Snowflake对数字开头标识符的要求:
- name: emspdb_archive database: lake schema: emspdb_archiveschema tables: - name: s_2020_09_history_logs identifier: "2020_09_history_logs"
错误原因说明
- 未加单引号时,DBT会将
s_2020_09_history_logs视为变量而非字符串,解析后生成的SQL出现.2020这类非法格式,触发Snowflake的编译错误。 - Snowflake要求以数字开头的标识符必须用双引号包裹,你的配置已经满足这一要求,只需确保模型中正确调用
source函数即可生成合法SQL。
内容的提问来源于stack exchange,提问作者Matthew Dwyer
相关产品推荐
相关产品推荐

