order by:
可以指定desc 降序 asc 升序
order by會(huì)對(duì)輸入做全局排序,因此只有一個(gè)Reducer(多個(gè)Reducer無(wú)法保證全局有序),然而只有一個(gè)Reducer,會(huì)導(dǎo)致當(dāng)輸入規(guī)模較大時(shí),消耗較長(zhǎng)的計(jì)算時(shí)間。
sort by :
對(duì)分區(qū)內(nèi)的數(shù)據(jù)進(jìn)行排序
sort by不是全局排序,其在數(shù)據(jù)進(jìn)入reducer前完成排序,因此,如果用sort by進(jìn)行排序,并且設(shè)置mapred.reduce.tasks>1,則sort by只會(huì)保證每個(gè)reducer的輸出有序,并不保證全局有序。sort by不同于order by,它不受Hive.mapred.mode屬性的影響,sort by的數(shù)據(jù)只能保證在同一個(gè)reduce中的數(shù)據(jù)可以按指定字段排序。使用sort by你可以指定執(zhí)行的reduce個(gè)數(shù)(通過(guò)set mapred.reduce.tasks=n來(lái)指定),對(duì)輸出的數(shù)據(jù)再執(zhí)行歸并排序,即可得到全部結(jié)果。
distribute by :
對(duì)map輸出進(jìn)行分區(qū)
distribute by是控制在map端如何拆分?jǐn)?shù)據(jù)給reduce端的。hive會(huì)根據(jù)distribute by后面列,對(duì)應(yīng)reduce的個(gè)數(shù)進(jìn)行分發(fā),默認(rèn)是采用hash算法。sort by為每個(gè)reduce產(chǎn)生一個(gè)排序文件。在有些情況下,你需要控制某個(gè)特定行應(yīng)該到哪個(gè)reducer,這通常是為了進(jìn)行后續(xù)的聚集操作。distribute by剛好可以做這件事。因此,distribute by經(jīng)常和sort by配合使用。
cluster by :
cluster by除了具有distribute by的功能外還兼具sort by的功能。當(dāng)distribute by和sort by 是同一個(gè)字段的時(shí)候可以使用cluster by替代。但是排序只能是倒敘排序,不能指定排序規(guī)則為ASC或者DESC。








暫無(wú)數(shù)據(jù)