Hive資料倉儲工具(四)分割槽和分桶

2021-09-29 06:12:37 字數 2437 閱讀 4224

目錄

一、分割槽和分桶的概念

分割槽:分桶:

二、分割槽實現

1、建立分割槽

按年建立分割槽t1:

按年月建立分割槽t2:

2、向分割槽新增資料

向年分割槽t1中新增資料

向年月分割槽t2新增資料

3、效果如下

年分割槽:

年月分割槽:

三、分桶的實現

1、分桶之前要執行命令hive.enforce.bucketing=true;

2、要使用關鍵字clustered by 指定分割槽依據的列名,還要指定分為多少桶

3、向桶中插入資料:

4、檢視桶資訊:

5、檢視分桶資料,要指定關鍵字tablesample

是指按照資料表的某列或某些列分為多個區,區從形式上可以理解為資料夾,比如我們要收集某個大型**的日誌資料,乙個**每天的日誌資料存在同一張表上,由於每天會生成大量的日誌,導致資料表的內容巨大,在查詢時進行全表掃瞄耗費的資源非常多。那其實這個情況下,我們可以按照日期對資料表進行分割槽,不同日期的資料存放在不同的分割槽,在查詢時只要指定分割槽欄位的值就可以直接從該分割槽查詢。

分桶是相對分割槽進行更細粒度的劃分。分桶將整個資料內容安裝某列屬性值得hash值進行區分,如要安裝name屬性分為3個桶,就是對name屬性值的hash值對3取摸,按照取模結果對資料分桶。如取模結果為0的資料記錄存放到乙個檔案,取模為1的資料存放到乙個檔案,取模為2的資料存放到乙個檔案。

假設我們有一張地域姓名表並按城市分割槽。那麼很有可能,北京分割槽的人數會遠遠大於其他分割槽,該分割槽的資料i/o吞吐效率將成為查詢的瓶頸。如果我們對錶中的姓名做分桶,將姓名按雜湊值分發到桶中,每個桶將分配到大致均勻的人數。

分桶解決的是資料傾斜的問題

hive (default)> create table t1(id int,dname string,loc string) partitioned by

> (year string);

hive (default)> create table t2(id int,dname string,loc string) partitioned by

> (year string,month string);

注意:表的型別需要和新增資料的型別對應,而partitioned by後的分割槽型別不能與表中存在的型別重複

準備好的dept表

備註:模為0

備註:模為1

備註:模為2

mysql 5 6 分割槽 四 分割槽和鎖定

在mysql 5.6.5及更早版本中,對於 myisam執行dml或ddl語句時,實際執行表級鎖的 儲存引擎 影響分割槽表的這種語句對整個 施加了鎖定 也就是說,所有分割槽都被鎖定,直到語句完成。mysql 5.6.6實現 分割槽鎖定修剪 這在許多情況下消除了不必要的鎖定。在mysql 5.6.6及...

mysql優化參考 四 分割槽

一 分割槽概念 mysql目前應該是只支援水平分割槽,一般的水平分割槽如果是表,則相當於原來儲存在乙個檔案的表分為多個檔案 應用場景 二 分割槽型別 列表分割槽 列分割雜湊分割槽 key分割槽 子分割槽mysql分割槽如何處理null 三 分割槽管理 四 分割槽修剪 五 分割槽的限制 與儲存引擎相關...

資料倉儲的分割槽與分桶

分割槽解釋 將資料倉儲內儲存資料量大的表,按表中列值進行切片,列值一樣的資料劃分到一起,列值分類有多少種就至少有這麼多的分割槽目錄。如 某電商公司訂單表按天分割槽,按訂單表的下單時間在同一天的資料劃分到乙個目錄中。分桶解釋 將資料倉儲內儲存資料量大的表,按表中列值的hash值對想劃分的桶數取模,值一...