1. 程式人生 > 實用技巧 >Hive 分桶

Hive 分桶

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中的資料儲存: