1. 程式人生 > >Hive grouping sets 的bug:ParseException line 7:22 missing ) at ',' near '<EOF>'

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