我正在尝试从允许用户指定列名别名的应用程序构建一些配置单元 (0.9) 查询。
我发现每当列别名是两个字符长并且是一个数字后跟 'b' 或 'B' 时,它就会给出错误:“无法识别选择目标中 'AS' '2b' ',' 附近的输入"
无效的查询:
select t1.emp_id as 1b from someTable t1;
select t1.emp_id as 2b from someTable t1;
select t1.emp_id as 1B from someTable t1;
有效的查询:
select t1.emp_id as 1b1 from someTable t1;
select t1.emp_id as 1ba from someTable t1;
select t1.emp_id as 1c from someTable t1;
这是 Hive 中的已知问题吗?我找不到与此类错误相关的任何 JIRA 问题。
最佳答案
好的,我很确定我找到了。 Hive 解析器将其识别为定义如下的 ByteLengthLiteral
:
ByteLengthLiteral
:
(Digit)+ ('b' | 'B' | 'k' | 'K' | 'm' | 'M' | 'g' | 'G')
;
我尝试用相同的语句将 b
替换为 k
、m
和 g
并得到相同的错误.
并且为了信息的缘故,一个标识符(as [identifier]
)被定义为...
Identifier
:
(Letter | Digit) (Letter | Digit | '_')*
| '`' RegexComponent+ '`'
;
这似乎应该有效,只是 ByteLengthLiteral
已经被处理,因此无法识别标识符。
关于sql - 配置单元列别名中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23474145/