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

今天遇到了一个问题,当使用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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值