hive分桶表bucketed table分桶字段選擇與個數確定


為什么分桶

(1)獲得更高的查詢處理效率。桶為表加上了額外的結構,Hive 在處理有些查詢時能利用這個結構。具體而言,連接兩個在(包含連接列的)相同列上划分了桶的表,可以使用 Map 端連接 (Map-side join)高效的實現。比如JOIN操作。對於JOIN操作兩個表有一個相同的列,如果對這兩個表都進行了桶操作。那么將保存相同列值的桶進行JOIN操作就可以,可以大大較少JOIN的數據量。

(2)提升采樣(sampling)效率;

什么時候分桶

需要Map-side join 和 sampling時

選什么字段分桶

1.int類型字段比較友好

2.取hash后各分區塊數據量比較均勻的字段

3.join的連接字段

當join連接的字段值取hash不夠均勻時,多取一個其它字段作為分桶字段;

分桶公式:

 bucket num = hash_function(bucketing_column) mod num_buckets

列的值做哈希取余 決定數據應該存儲到哪個桶

設置多少個  INTO 個數 BUCKETS

當數據量夠大時設置為約等於≈128M的倍數

當數據量不夠大時考慮,計算的並行度(比如129MB設置2 或者4 )

bucket個數會決定在該表或者該表的分區對應的hdfs目錄下生成對應個數的文件,而mapreduce的個數是根據文件塊的個數據確定的map個數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM