Hive 分桶
阿新 • • 發佈:2020-08-04
Hive 分桶
1、hive分桶
- 分桶表是對列值取雜湊值的方式,將不同資料放到不同檔案中儲存。
- 對於hive中每一 個表分割槽都可以進一 步進行分桶。
- 由列的雜湊值除以桶的個數來決定每條資料劃分在哪個桶中。
適用場景:
- 資料抽樣(sampling )
2、開啟支援分桶
開啟分桶
set hive.enforce .bucketing=true;
-
預設: false; 設定為tue之後,mr執行時會根據bucket的個數自動分配reduce task個數。 (使用者也可以通過
mapred.reduce.tasks自己設定reduce任務個數,但分桶時不推薦使用) -
注意: - -次作業產生的桶(檔案數量)和reduce task個數- 致。
往分桶表中載入資料
insert into table bucket_table select columns from tbl;
//或者
insert overwrite table bucket_table select columns from tbl;
桶表的抽樣:
select * from buck_table tablesample(bucket 1 out of 4 on columns)
TABLESAMPLE語法:
- TABLESAMPLE(BUCKET x OUT OF y)
一x:表示從哪個bucket開始抽取資料 - y:必須為該表總bucket數的倍數或因子
案例
建立一個源資料表
CREATE TABLE psn( id INT, name STRING, age INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
資料:
CREATE TABLE psn_1( id INT, name STRING, age INT)
CLUSTERED BY (age) INTO 4 BUCKETS
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
把源資料表的資料插入分桶表中
insert into psn_1 select id,name,age from psn;
hdfs中的資料儲存: