案例:
Select tmp.username,date,sum(tmp.su) over(partition by tmp.username order by tmp.date ) totle From ( Select username,sum(cost_money) su,date From table_test1 Group by date,username ) tmp Group by tmp.date,tmp.username Order by tmp.username;
mysql運行結果:
hive提示:Semantic Exception: Line 1:24 Expression not in GROUP BY key 'su' (state=42000,code=40000)
原因:1.Hive不允許直接訪問非group by字段;
解決:
1.對於非group by字段,可以用Hive的collect_set函數收集這些字段,返回一個數組;
2.使用數字下標,可以直接訪問數組中的元素;
也可以直接將字段放入group by中:
Select tmp.username,date,sum(tmp.su) over(partition by tmp.username order by tmp.date ) totle From ( Select username,sum(cost_money) su,date From table_test1 Group by date,username ) tmp Group by tmp.date,tmp.username,su Order by tmp.username;