Hive 分桶

Hive 分桶

  • 分桶
    • 對(duì)于每一個(gè)表或者分區(qū),Hive可以進(jìn)一步組織成桶,也就是更為細(xì)粒度的數(shù)據(jù)范圍劃分
    • Hive是針對(duì)某一列進(jìn)行分桶
    • Hive采用對(duì)列值哈希,然后除以桶的個(gè)數(shù)求余的方式?jīng)Q定該條記錄存放在哪個(gè)桶當(dāng)中
  • 好處
    • 獲得更高的查詢處理效率
    • 使取樣(sampling) 更高效
  • 分桶的使用
    • select * from bucketed_user
    • tablesample(bucket 1 out of 2 on id)
  • bucket join
    • set hive.optimize.bucketmapjoin = true;
    • set hive.optimize.bucketmapjoin.sortedmerge= true;
    • set hive.input.format=org.apache.hadoop.hive.ql.io.BucketizedHiveInputFormat;
  • 樣例:
    • create table bucketed_user(
    • id int,
    • name string
    • )
    • clustered by (id) sorted by (name) into 4 buckets
    • row format delimited fields terminated by '\t' stored as textfile;
  • 分桶默認(rèn)不開啟 需開啟
    • Set hive.enforce.bucketing= true;
  • 鏈接兩個(gè)在(包含連接列)相同列上劃分了桶的表,可以使用Map端鏈接(Map-side join)高效的實(shí)現(xiàn)。比如Join操作。對(duì)于Join操作兩個(gè)表有一個(gè)相同的列,如果對(duì)著兩個(gè)表都進(jìn)行了桶操作。那么將保持相同列值得桶進(jìn)行Join操作就可以,可以大大減少Join的數(shù)據(jù)量。
  • 對(duì)于map端連接的情況,兩個(gè)表以相同方式劃分桶。處理左邊表內(nèi)某個(gè)桶的mapper知道右邊的表內(nèi)相匹配的行在對(duì)應(yīng)的桶內(nèi)。因此,mapper只需要獲取那個(gè)桶(這只是右邊表內(nèi)存儲(chǔ)數(shù)據(jù)的一小部分)即可進(jìn)行連接。這一優(yōu)化方法并不一定要求 兩個(gè)表必須桶的個(gè)數(shù)相同,兩個(gè)表的桶個(gè)數(shù)是倍數(shù)關(guān)系也可以。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容