文章目錄:
- 1、全局排序 (order by)
- ① 使用order by排序的子句在select 結尾處。
- ②案例實操:
- 2、區內排序 (sort by )分區字段 (distribute by)
- 設置reduces 個數:
- set mapreduce.job.reduces = 3;
- distribute by 分區字段 store by 排序字段 聯合使用
- ②案例實操:不是全局排序,其在數據進入reducer前完成排序。因此,如果用sort by進行排序,並且設置mapreduce.job.reduces>1,則sort by只保證每個reducer的輸出有序,不保證全局有序。
- ③輸出結果:排序字段是NBA.name 可以看出是亂序。
- 3、distribute by
- ① 類似於MapReduce中分區partation,對數據進行分區,結合sort by進行使用 distribute by控制在map端如何拆分數據給reduce端。hive會根據distribute by後面列,對應reduce的個數進行分發,默認是採用hash算法。
- ② 二者結合使用的效果:
- 4、當分區條件和排序條件相同使用(cluster by)
- ②案例實操:
- 5、group by:對檢索的數據進行單純的分組,一般和聚合函數一起使用。
- 6、partition by:用來輔助查詢,縮小查詢範圍,加快數據的檢索速度和對數據按照一定的規格和條件進行管理。
- ① row_number() over ( partition by order by )
- select nba.id, nba.name, nba.city, row_number() over( partition by nba.name order by nba.id desc ) from nba;
- ② count(字段) over (partition by..... order by ....desc)
- hive (test_db)> select nba.id,nba.name,nba.city,count(nba.city) over (partition by nba.name order by nba.id desc) from nba;
- select nba.id,nba.name,nba.city,max(nba.id) over (partition by nba.name order by nba.id desc) from nba;
- max(id)over(parition by name order by id ) 的意思是通過name分組 在每一個組當中使用id排序 最後求出最大的id
- 7、總結:
1、全局排序 (order by)
order by:全局排序 只有一個reduce;多個reduce無用
① 使用order by排序的子句在select 結尾處。
降序:desc
升序:asc 不需要指定,默認是升序
②案例實操:
結果:
2、區內排序 (sort by )分區字段 (distribute by)
設置reduces 個數:
set mapreduce.job.reduces = 3;
distribute by 分區字段 store by 排序字段 聯合使用
②案例實操:不是全局排序,其在數據進入reducer前完成排序。因此,如果用sort by進行排序,並且設置mapreduce.job.reduces>1,則sort by只保證每個reducer的輸出有序,不保證全局有序。
③輸出結果:排序字段是NBA.name 可以看出是亂序。
3、distribute by
① 類似於MapReduce中分區partation,對數據進行分區,結合sort by進行使用 distribute by控制在map端如何拆分數據給reduce端。hive會根據distribute by後面列,對應reduce的個數進行分發,默認是採用hash算法。
② 二者結合使用的效果:
hive (test_db)> select nba.id,nba.name,nba.city from nba distribute by nba.name sort by nba.id;
結果:
4、當分區條件和排序條件相同使用(cluster by)
① 當分區條件和排序條件相同使用cluster by .
Cluster by 除了具有distribute by的功能外,還會對該字段進行排序。當distribute by和sort by 字段相同時,可以使用cluster by 代替
②案例實操:
我是按照 :nba.name 字母升序排序的,默認數據是亂序。
結果出來如下:
5、group by:對檢索的數據進行單純的分組,一般和聚合函數一起使用。
6、partition by:用來輔助查詢,縮小查詢範圍,加快數據的檢索速度和對數據按照一定的規格和條件進行管理。
① row_number() over ( partition by order by )
select nba.id, nba.name, nba.city, row_number() over( partition by nba.name order by nba.id desc ) from nba;
② count(字段) over (partition by… order by …desc)
hive (test_db)> select nba.id,nba.name,nba.city,count(nba.city) over (partition by nba.name order by nba.id desc) from nba;
結果:
select nba.id,nba.name,nba.city,max(nba.id) over (partition by nba.name order by nba.id desc) from nba;
max(id)over(parition by name order by id ) 的意思是通過name分組 在每一個組當中使用id排序 最後求出最大的id
7、總結:
1、今天學到一招:在我們hive中 使用over子句窗口函數時要在over 前加聚合函數,不然報錯,親自實戰。
2、在聚合函數前面不要忘記加逗號
3、聚合函數如下:
max()
min()
count()
sum()
AVG()
【轉載註明出處,還望尊重原創 】
【作者水平有限,如有錯誤歡迎指正 .】
如果我的博客對你有幫助、如果你喜歡我的博客內容,請
“點贊” “評論”“收藏”
一鍵三連哦!聽說點讚的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我博客看看。