HIVE的四種排序,以及分區分桶

2021-08-21 19:51:42 字數 2305 閱讀 5446

hive的四種排序

order by

order by 會對輸入做全域性排序,因此只有乙個reducer(多個reducer無法保證全域性有序)

只有乙個reducer,會導致當輸入規模比較大時,需要較長的時間。

set hive.mapred.mode=nonstrict; (default value / 預設值)

set hive.mapred.mode=strict;

order by 和資料庫中的order by功能一致按照某一項&幾項排序輸出。

與資料庫中order by的區別在於hive.mapred.mode = strict模式下 必須指定limit否則執行會報錯

原因:在order by狀態下所有的資料都會到一台伺服器進行reduce操作也就是只有乙個reduce,如果在資料量大的情況下會出現無果的情況,如果進行limit n,那只有n * map

number 條記錄而已。只有乙個reduce也可以出來裡過來

sort by

sort by不是全域性排序,其在資料進入reducer前完成排序

因此,如果用sort by進行排序,並且設定mapred.reduce.tasks>1,則sort by只保證每個reducer的輸出有序,不保證全域性有序。

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

sort by的資料只能保證在同乙個reduce中的資料可以按指定字段排序。

使用sort by你可以指定執行的reduce個數(set mapred.reduce.tasks=),對輸出的資料在執行歸併排序,即可以得到全部結果。

注意:可以用limit子句大大減少資料量。使用limit n後,傳輸到reduce端(單機)的資料記錄就減少到n*(map個數)。否則由於資料過大可能出不了結果。

distribute by

按照指定的字段對資料進行劃分到不同的輸出reduce  / 檔案中。

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

此方法會根據name的長度劃分到不同的reduce中,最終輸出到不同的檔案中。 

length 是內建函式,也可以指定其他的函式或這使用自定義函式。

cluster by

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

但是排序只能是倒序排序,不能指定排序規則為asc 或者desc。

hive的分區分桶

我們發現其實桶的概念就是mapreduce的分割槽的概念,兩者完全相同。物理上每個桶就是目錄裡的乙個檔案,乙個作業產生的桶(輸出檔案)數量和reduce任務個數相同。

而分割槽表的概念,則是新的概念。分割槽代表了資料的倉庫,也就是資料夾目錄。每個資料夾下面可以放不同的資料檔案。通過資料夾可以查詢裡面存放的檔案。但資料夾本身和資料的內容毫無關係。

桶則是按照資料內容的某個值進行分桶,把乙個大檔案雜湊稱為乙個個小檔案。 

這些小檔案可以單獨排序。如果另外乙個表也按照同樣的規則分成了乙個個小檔案。兩個表join的時候,就不必要掃瞄整個表,只需要匹配相同分桶的資料即可。效率當然大大提公升。

同樣,對資料抽樣的時候,也不需要掃瞄整個檔案。只需要對每個分割槽按照相同規則抽取一部分資料即可。 

分割槽表如果在建表時使用了 partitioned by,錶即為分割槽表。分割槽表下的資料按分割槽鍵的值(或值的範圍)放在hdfs下的不同目錄中,可以有效減少查詢時掃瞄的資料量,提公升查詢效率。

• 非分割槽表

非分割槽表即除分割槽表之外的表。

2.1.2.1.4. 按表是否分桶分類

按表是否分桶可以將表分為兩類:分桶表和非分桶表。

• 分桶表

如果在建表時使用了 clustered by … into … buckets,錶即為分桶表。分桶表下的資料按

分桶鍵的雜湊值放在hdfs下的不同目錄中,可以有效減少查詢時掃瞄的資料量,提公升查詢效率。

• 非分桶表

非分桶錶即除分桶表之外的表

hive的應用範圍舉例

日誌分析:日誌分析可以優化系統,獲知使用者行為,也可以獲知資料的統計資訊

資料探勘:通過結構化資料的挖掘,能夠獲得原先使用者沒有意識的資訊

文件索引:可以對一系列文件進行分析,並形成文件的索引結構,不一定是完整的排序表,可能是關聯資訊的索引

商業智慧型資訊處理:可以對商業資訊進行查詢分析,從中可以獲得一些只能決策的資訊

及時查詢以及資料驗證:資料分析人員可能臨時需要驗證資料的特性,需要查詢引擎迅速進行資料分析

Hive的分割槽 分桶 索引

一 分割槽 mr的分割槽 是將資料按照一定的邏輯進行查分,劃分為不同的區域,這個區域的資料將會給指定的reduce。hive的分割槽 對錶劃分成幾個區域,通過分類把不同型別的資料放到不同的目錄下。分割槽表與普通表相比它的優勢和劣勢 優勢 和普通表相比,當按照分割槽條件進行過濾的時候分割槽表會比普通表...

Hive中的分割槽 分桶以及資料抽樣

6.1 分割槽 分割槽,在hdfs中表現為table目錄下的子目錄 6.2 分桶 對應建表時bucket關鍵字,在hdfs中表現為同乙個表目錄下根據hash雜湊之後的多個檔案,會根據不同的檔案把資料放到不同的桶中。如果分桶表匯入資料沒有生成對應數量的檔案,可通過如下方式解決 開啟自動分桶,設定引數 ...

hive的分割槽以及分桶

2016年10月26日 09 50 38 閱讀數 3999 1 hive 分割槽表 在hive select查詢中一般會掃瞄整個表內容,會消耗很多時間做沒必要的工作。有時候只需要掃瞄表中關心的一部分資料,因此建表時引入了partition概念。分割槽表指的是在建立表時指定的partition的分割槽...