hive 中 order by, sort by ,dristribute by,cluster by 的作用和用法
1. order by
set hive.mapred.mode=nonstrict; (default value / 預設值)
set hive.mapred.mode=strict;
order by 和資料庫中的order by 功能一致,按照某一項 & 幾項 排序輸出。
與資料庫中 order by 的區別在於在hive.mapred.mode = strict 模式下 必須指定 limit 否則執行會報錯。
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 狀態下所有資料會到一台伺服器進行reduce操作也即只有乙個reduce,如果在資料量大的情況下會出現無法輸出結果的情況,如果進行 limit n ,那只有 n * map number 條記錄而已。只有乙個reduce也可以處理過來。
2. sort by
sort by 不受 hive.mapred.mode 是否為strict ,nostrict 的影響
sort by 的資料只能保證在同一reduce中的資料可以按指定字段排序。
使用sort by 你可以指定執行的reduce 個數 (set mapred.reduce.tasks=) 這樣可以輸出更多的資料。
對輸出的資料再執行歸併排序,即可以得到全部結果。
注意:可以用limit子句大大減少資料量。使用limit n後,傳輸到reduce端(單機)的資料記錄數就減少到n* (map個數)。否則由於資料過大可能出不了結果。
3. distribute by
按照指定的字段對資料進行劃分到不同的輸出reduce / 檔案中。
insert overwrite local directory '/home/hadoop/out' select * from test order by name distribute by length(name);
此方法會根據name的長度劃分到不同的reduce中,最終輸出到不同的檔案中。
length 是內建函式,也可以指定其他的函式或這使用自定義函式。
4. cluster by
cluster by 除了具有 distribute by 的功能外還兼具 sort by 的功能。
倒序排序,且不能指定排序規則。 asc 或者 desc。
js陣列中的幾種排序
每輪依次比較相鄰兩個數的大小,後面比前面小則交換 var b 0 設定用來儲存調換位置的值 var a 1,9,33,2,5,34,23,98,14 氣泡排序 for var i 0 i i console.log a 1,2,5,9,14,23,33,34,98 function sortnumb...
mysql 幾種排序 MySql的幾種排序方式
資料排序的情況很常見,今天介紹一下mysql的幾種排序方式,是我最近有使用到的,希望能對大家有所幫助。這裡先建立一張普通的表,create table test1 id bigint 20 not null auto increment,name varchar 50 not null,date t...
Objective C中陣列排序幾種情況的總結
大體上,oc中常用的陣列排序有以下幾種方法 sortedarrayusingselector sortedarrayusingcomparator sortedarrayusingdescriptors 1 簡單排序 sortedarrayusingselector 如果只是對字串的排序,可以利用s...