Snowflake含CURRENT_DATE列的表:WHERE子句中如何使用该列
Snowflake中含大写
"CURRENT_DATE"列的表查询问题 我在数据湖中有一张列名为"CURRENT_DATE"的表,遇到了以下Snowflake的行为:
- 执行以下语句可以成功创建表:
create or replace TABLE TEST ( "current_date" DATE );
- 但执行下面的语句会报错:
create or replace TABLE TEST ( "CURRENT_DATE" DATE );
- 不过通过
CREATE TABLE AS SELECT语句可以创建出含大写"CURRENT_DATE"列的表:
create or replace TABLE TEST as select Col1 as "CURRENT_DATE" from TEST1
现在我无法在WHERE子句或CASE语句中正常使用该字段,执行如下查询无法得到正确结果:
select * from TEST where "CURRENT_DATE" ='2027-10-01' limit 10;
请问:
- 是否有办法对该字段进行查询?
- 若没有,Snowflake为何允许创建名为
"CURRENT_DATE"的列?
解决查询问题的方法
问题核心是CURRENT_DATE是Snowflake的内置函数/保留关键字,在WHERE子句中直接写"CURRENT_DATE"时,Snowflake会优先将其解析为返回当前系统日期的内置函数,而非你的列名。要正确引用该列,需通过表名/别名限定明确指定:
- 使用表名限定列:
select * from TEST where TEST."CURRENT_DATE" = '2027-10-01' limit 10;
- 使用表别名限定列:
select * from TEST t where t."CURRENT_DATE" = '2027-10-01' limit 10;
通过这种方式,Snowflake会准确识别你要引用的是表中的列而非内置函数。
为什么允许创建该列?
Snowflake的标识符规则中,带双引号的标识符可以绕过保留关键字的限制,支持创建与保留关键字同名的对象(包括列、表等)。这一设计主要是为了兼容遗留系统或特殊命名场景,但官方并不推荐这种做法——因为容易引发解析歧义,增加后续维护成本。
内容的提问来源于stack exchange,提问作者Nishant Shrivastava
相关产品推荐
相关产品推荐

