- group by
按照某些字段的值進行分組,有相同值放到一起。
樣例
select col1 [,col2] ,count(1),sel_expr(聚合操作)from table
where condition -->Map端執行
group by col1 [,col2] -->Reduce端執行
[having] -->Reduce端執行
注意
select後面非聚合列,必須出現在group by中
select後面除了普通列就是一些聚合操作
group by後面也可以跟表達式,比如substr(col)
特性
使用了reduce操作,受限於reduce數量,設置reduce參數mapred.reduce.tasks
輸出文件個數與reduce數相同,文件大小與reduce處理的數據量有關。
問題
網絡負載過重
數據傾斜,優化參數hive.groupby.skewindata
爲true,會啓動一個優化程序,避免數據傾斜。
set mapred.reduce.tasks=5;
select * from TabOrder order by ch asc,num desc;
set mapred.reduce.tasks=3;
select ch ,count(1) as num from TabOrder group by ch;
set hive.groupby.skewindata = true;
select ch ,count(1) as num from TabOrder group by ch having count(1)>2;
select col from tablename group by col; <==> select distinct col from tablename;
附上原鏈接:https://blog.csdn.net/scgaliguodong123_/article/details/46944519#t2