Hive grouping sets 的bug:ParseException line 7:22 missing ) at ',' near '<EOF>'

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengzheku/article/details/80599320
今天遇到了一个问题,当使用grouping sets 时,一直报错如下
ParseException line 7:22 missing ) at ',' near '<EOF>'

line 7:31 extraneous input ')' expecting EOF near '<EOF>'

sql为:

SELECT tab1.a,
       tab1.b, 
       SUM(tab1.c)
FROM tab1
GROUP BY tab1.a,
         tab1.b

GROUPING SETS ((tab1.a, tab1.b))

从网上找了下原因,说是HIve自身的bug,可以改成如下即可运行:

SELECT tab1.a,
       tab1.b, 
       SUM(tab1.c)
FROM tab1
GROUP BY tab1.a,
         tab1.b

GROUPING SETS ((a, tab1.b))。

也就是在 grouping sets 后面每一种组合里,如果组合在2个以上,就不能把x.column1 放第一个位置,应该改为 column1。

例如:

表tab1 有a,b,c 三列

表tab2 有a,d两列

就不能写成如下形式

SELECT tab1.a,
       b, d
       SUM(tab1.c)
FROM tab1 join tab2 on tab1.a = tab2.b
GROUP BY tab1.a,b, d

GROUPING SETS ((tab1.a, b, d))

应该改为:

SELECT tab1.a,
       b, d
       SUM(tab1.c)
FROM tab1 join tab2 on tab1.a = tab2.b
GROUP BY tab1.a,b, d

GROUPING SETS ((b, tab1.a, d))

即不能使tab1.a 放在第一位置,但如果只有tab1.a的话是可以的

如下是正确的

SELECT tab1.a,
       b, d
       SUM(tab1.c)
FROM tab1 join tab2 on tab1.a = tab2.b
GROUP BY tab1.a,b, d
GROUPING SETS ((tab1.a))



参考链接:https://issues.apache.org/jira/browse/HIVE-6950


猜你喜欢

转载自blog.csdn.net/fengzheku/article/details/80599320