hive開窗函數over(partition by ......)用法


一、over(partition by ......)主要和聚合函數sum()、count()、avg()等結合使用,實現分組聚合的功能

示列:根據day_id日期和mac_id機器碼進行聚合分組求每一天的該機器的銷量和即sum_num,hive sql語句:select day_id,mac_id,mac_color,day_num,sum(day_num)over(partition by day_id,mac_id order by day_id) sum_num from test_temp_mac_id;

注:day_id,mac_id,mac_color,day_num為查詢原有數據,sum_num為計算結果

 

day_id mac_id mac_color day_num sum_num
20171011 1292 金色 1 89
20171011 1292 金色 14 89
20171011 1292 金色 2 89
20171011 1292 金色 11 89
20171011 1292 黑色 2 89
20171011 1292 粉金 58 89
20171011 1292 金色 1 89
20171011 2013 金色 10 22
20171011 2013 金色 9 22
20171011 2013 金色 2 22
20171011 2013 金色 1 22
20171012 1292 金色 5 18
20171012 1292 金色 7 18
20171012 1292 金色 5 18
20171012 1292 粉金 1 18
20171012 2013 粉金 1 7
20171012 2013 金色 6 7
20171013 1292 黑色 1 1
20171013 2013 粉金 2 2
20171011 12460 茶花金 1 1

 

 

 


二、over(partition by ......)與group by 區別

如果用group by實現一中根據day_id日期和mac_id機器碼進行聚合分組求每一天的該機器的銷量和即sum_num,

則hive sql語句為:select day_id,mac_id,sum(day_num) sum_num from test_temp_mac_id group by day_id,mac_id order by day_id;結果如下表

注:我們可以觀察到group by可以實現同樣的分組聚合功能,但sql語句不能寫與分組聚合無關的字段,否則會報錯,即group by 與over(partition by ......)主要區別為,帶上group by的hive sql語句只能顯示與分組聚合相關的字段,而帶上over(partition by ......)的hive sql語句能顯示所有字段.。

 

day_id mac_id sum_num
20171011 124609 1
20171011 20130 22
20171011 12922 89
20171012 12922 18
20171012 20130 7
20171013 12922 1
20171013 20130 2


https://blog.csdn.net/qq_37325859/article/details/78222712


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM