溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hive中Order by, Sort by ,Dristribute by,Cluster By有什么用

發(fā)布時(shí)間:2021-12-08 10:52:16 來(lái)源:億速云 閱讀:133 作者:小新 欄目:云計(jì)算

這篇文章主要介紹了Hive中Order by, Sort by ,Dristribute by,Cluster By有什么用,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

Hive 中 Order by, Sort by ,Dristribute by,Cluster By 的作用和用法

1. order by

set hive.mapred.mode=nonstrict; (default value / 默認(rèn)值)

set hive.mapred.mode=strict;

 order by 和數(shù)據(jù)庫(kù)中的Order by 功能一致,按照某一項(xiàng) & 幾項(xiàng) 排序輸出。

 與數(shù)據(jù)庫(kù)中 order by 的區(qū)別在于在hive.mapred.mode = strict 模式下 必須指定 limit 否則執(zhí)行會(huì)報(bào)錯(cuò)。

 hive> select * from test order by id;     

FAILED: Error in semantic analysis: 1:28 In strict mode, if ORDER BY is specified, LIMIT must also be specified. Error encountered near token 'id'

 原因: 在order by 狀態(tài)下所有數(shù)據(jù)會(huì)到一臺(tái)服務(wù)器進(jìn)行reduce操作也即只有一個(gè)reduce,如果在數(shù)據(jù)量大的情況下會(huì)出現(xiàn)無(wú)法輸出結(jié)果的情況,如果進(jìn)行 limit n ,那只有  n * map number 條記錄而已。只有一個(gè)reduce也可以處理過(guò)來(lái)。

2. sort by

sort by 不受 hive.mapred.mode 是否為strict ,nostrict 的影響

 sort by 的數(shù)據(jù)只能保證在同一reduce中的數(shù)據(jù)可以按指定字段排序。

 使用sort by 你可以指定執(zhí)行的reduce 個(gè)數(shù) (set mapred.reduce.tasks=<number>) 這樣可以輸出更多的數(shù)據(jù)。

對(duì)輸出的數(shù)據(jù)再執(zhí)行歸并排序,即可以得到全部結(jié)果。

注意:可以用limit子句大大減少數(shù)據(jù)量。使用limit n后,傳輸?shù)絩educe端(單機(jī))的數(shù)據(jù)記錄數(shù)就減少到n* (map個(gè)數(shù))。否則由于數(shù)據(jù)過(guò)大可能出不了結(jié)果。

 http://www.alidata.org/archives/622


3. distribute by

 按照指定的字段對(duì)數(shù)據(jù)進(jìn)行劃分到不同的輸出reduce  / 文件中。

 insert overwrite local directory '/home/hadoop/out' select * from test order by name distribute by length(name);  

 此方法會(huì)根據(jù)name的長(zhǎng)度劃分到不同的reduce中,最終輸出到不同的文件中。 

 length 是內(nèi)建函數(shù),也可以指定其他的函數(shù)或這使用自定義函數(shù)。

4. DISTRIBUTE BY with SORT BY
DISTRIBUTE BY能夠控制map的輸出在reduce中如何劃分。其可以按照指定的字段對(duì)數(shù)據(jù)進(jìn)行劃分到不同的輸出reduce/文件中。
DISTRIBUTE BY和GROUP BY有點(diǎn)類似,DISTRIBUTE BY控制reduce如何處理數(shù)據(jù),而SORT BY控制reduce中的數(shù)據(jù)如何排序。
注意:hive要求DISTRIBUTE BY語(yǔ)句出現(xiàn)在SORT BY語(yǔ)句之前。 

5. Cluster By

 cluster by 除了具有 distribute by 的功能外還兼具 sort by 的功能。 

 默認(rèn)倒序排序,但DISTRIBUTE BY的字段和SORT BY的字段必須相同,且不能指定排序規(guī)則。 asc  或者 desc。

總結(jié):

ORDER BY是全局排序,但在數(shù)據(jù)量大的情況下,花費(fèi)時(shí)間會(huì)很長(zhǎng)
SORT BY是將reduce的單個(gè)輸出進(jìn)行排序,不能保證全局有序
DISTRIBUTE BY可以按指定字段將數(shù)據(jù)劃分到不同的reduce中
當(dāng)DISTRIBUTE BY的字段和SORT BY的字段相同時(shí),可以用CLUSTER BY來(lái)代替 DISTRIBUTE BY with SORT BY。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Hive中Order by, Sort by ,Dristribute by,Cluster By有什么用”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI