亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Hive中對表進行分區和存儲有什么區別?

在Hive中對表進行分區和存儲有什么區別?

Smart貓小萌 2019-11-22 13:13:36
我知道兩者都是在表中的列上執行的,但是每個操作有何不同。
查看完整描述

3 回答

?
Cats萌萌

TA貢獻1805條經驗 獲得超9個贊

分區數據通常用于水平分布負載,這具有性能優勢,并有助于以邏輯方式組織數據。示例:如果我們處理的是一個大employee表,并且經常使用帶有WHERE將結果限制到特定國家或地區的子句運行查詢。為了獲得更快的查詢響應,Hive表可以是PARTITIONED BY (country STRING, DEPT STRING)。分區表更改了Hive構造數據存儲的方式,Hive現在將創建反映分區結構的子目錄,例如

... /員工/ 國家 / 地區= ABC / DEPT = XYZ。

如果查詢來自雇員的限制country=ABC,它將僅掃描一個目錄的內容country=ABC。僅當分區方案反映通用篩選時,這才能大大提高查詢性能。分區功能在Hive中非常有用,但是,創建過多分區的設計可能會優化某些查詢,但會對其他重要查詢不利。另一個缺點是,分區過多是不必要地創建了大量的Hadoop文件和目錄,并給NameNode帶來了開銷,因為它必須將文件系統的所有元數據都保留在內存中。

存儲桶是用于將數據集分解為更易于管理的部分的另一種技術。例如,假設一個表date用作頂級分區和employee_id第二級分區會導致太多的小分區。相反,如果我們對employee表進行存儲并employee_id用作存儲列,則該列的值將由用戶定義的數字散列到存儲桶中。具有相同記錄的記錄employee_id 將始終存儲在同一存儲桶中。假設的數量employee_id遠大于存儲桶的數量,則每個存儲桶將具有許多employee_id。創建表時,您可以指定如下CLUSTERED BY (employee_id) INTO XX  BUCKETS;其中XX是存儲桶數。桶裝有幾個優點。桶的數量是固定的,因此它不會隨數據波動。如果兩個表由進行存儲employee_id,則Hive可以創建邏輯上正確的采樣。桶也有助于進行有效的地圖側聯接等。


查看完整回答
反對 回復 2019-11-22
  • 3 回答
  • 0 關注
  • 1265 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號