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

Apache Calcite SQL解析器能否支持含数字的列或列别名?

Apache Calcite是否支持数字开头的列/列别名?

问题场景

执行包含数字开头列别名的SQL时,Calcite解析器报错:

SELECT empid as 3_e FROM EMP

报错信息:

Exception: org.apache.calcite.sql.parser.SqlParseException: Encountered "3" at line 1, column 17.
Was expecting one of:
    <QUOTED_STRING> ...
    <BRACKET_QUOTED_IDENTIFIER> ...
    <QUOTED_IDENTIFIER> ...
    <BACK_QUOTED_IDENTIFIER> ...
    <BIG_QUERY_BACK_QUOTED_IDENTIFIER> ...
    <HYPHENATED_IDENTIFIER> ...
    <IDENTIFIER> ...
    <UNICODE_QUOTED_IDENTIFIER> ...

将别名修改为非数字开头(如SELECT empid as e FROM EMP)后,查询可正常解析。

解答

Apache Calcite支持在列或列别名中使用数字,但数字开头的标识符必须用引号(或特定引用符号)包裹——这是因为Calcite默认遵循SQL标准:未被引用的标识符不能以数字开头。

解决方法

只需给数字开头的别名加上引号即可,示例:

  • 使用双引号:
SELECT empid as "3_e" FROM EMP
  • 使用反引号(需确保Calcite配置支持反引号标识符):
SELECT empid as `3_e` FROM EMP

当然,修改别名去掉开头数字也是可行的,但这属于规避手段,并非必须。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:42:17