Hive grouping sets 的bug: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