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
相关产品推荐
相关产品推荐

