我正在尝试从应用程序构建一些hive(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问题。
答案 0 :(得分:2)
ByteLengthLiteral
,其定义如下:
ByteLengthLiteral
:
(Digit)+ ('b' | 'B' | 'k' | 'K' | 'm' | 'M' | 'g' | 'G')
;
我尝试使用b
,k
和m
替换g
的同一语句,并得到了相同的错误。
为了便于提供信息,标识符(as [identifier]
)定义为......
Identifier
:
(Letter | Digit) (Letter | Digit | '_')*
| '`' RegexComponent+ '`'
;
除了已经处理ByteLengthLiteral
之外,它似乎应该有效,因此无法识别标识符。
答案 1 :(得分:1)
climbbage给出了一个很好的答案,说明为什么会发生这种情况;这是一个如何解决它的答案 - 只需使用反引号,如下:
select t1.emp_id as `1b` from someTable t1;