溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive中如何排序

發布時間:2021-12-10 11:05:51 來源:億速云 閱讀:243 作者:小新 欄目:大數據

這篇文章主要為大家展示了“Hive中如何排序”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Hive中如何排序”這篇文章吧。

1、全局排序:order  by 

order by 子句出現在select語句的結尾;order by子句對最終的結果進行排序;默認使用升序(ASC);可以使用DESC,跟在字段名之后表示降序;
ORDER BY執行全局排序,只有一個reduce;

-- 按別名排序
select empno, ename, job, mgr, sal + nvl(comm, 0) salcomm, deptno  from emp  order by salcomm desc;
-- 多列排序
select empno, ename, job, mgr, sal + nvl(comm, 0) salcomm, deptno  from emp   order by deptno, salcomm desc;

2、每個MR內部排序:sort by

對于大規模數據而言order by效率低;在很多業務場景,我們并不需要全局有序的數據,此時可以使用sort by;sort by為每個reduce產生一個排序文件,在reduce內部進行排序,得到局部有序的結果;

-- 設置reduce個數
set mapreduce.job.reduces=2;   -- 按照工資降序查看員工信息   select * from emp sort by sal desc;
-- 將查詢結果導入到文件中(按照工資降序)。生成兩個輸出文件,每個文件內部數據按工資降序排列
insert overwrite local directory '/home/hadoop/output/sortsal'    select * from emp sort by sal desc;

3、分區排序:distribute by

distribute by 將特定的行發送到特定的reducer中,便于后繼的聚合 與 排序操作;distribute by 類似于MR中的分區操作,可以結合sort by操作,使分區數據有序;distribute by 要寫在sort by之前;

-- 將數據分到3個區中,每個分區都有數據
set mapreduce.job.reduces=3;
insert overwrite local directory '/home/hadoop/output/distBy1'  select empno, ename, job, deptno, sal + nvl(comm, 0) salcomm  from emp distribute by deptno   sort by salcomm desc;

4、cluster by 

當distribute by 與 sort by是同一個字段時,可使用cluster by簡化語法; cluster by 只能是升序,不能指定排序規則;-- 語法上是等價的
select * from emp distribute by deptno sort by deptno;   select * from emp cluster by deptno;

排序小結:
order by。執行全局排序,效率低。生產環境中慎用
sort by。使數據局部有序(在reduce內部有序)
distribute by。按照指定的條件將數據分組,常與sort by聯用,使數據局部有序cluster by。

當distribute by 與 sort by是同一個字段時,可使用cluster by簡化語法

以上是“Hive中如何排序”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女