1. 程式人生 > >Hive分桶

Hive分桶

rri clu pan map limited table clust 同文件 mapred

1.簡介

  分桶表是對列值取哈希值的方式將不同數據放到不同文件中進行存儲。對於hive中每一個表,分區都可以進一步進行分桶。由列的哈希值除以桶的個數來決定數據劃分到哪個桶裏。

2.適用場景

  1.數據抽樣【sampling】

  2.map-join

3.開啟支持分桶

  配置;set hive.enforce.bucketing=true;

  默認值:false

  設置為true後,mapreduce運行時會根據bucket的個數自動分配reduce task個數

  註意:首次作業產生的桶【文件個數】和reduce task個數一致。

4.加載數據  

  執行:

    insert into table bucket_table select columnd from tbl;

    insert override table bucket_table select columns from tbl;

5.抽樣

  執行:

    select * from bucket_table tablesample(bucket 1 out of 4 on columns);

  語法:TABLESAMPLE(BUCKET x OUT OF y)

  備註:y必須是table總bucket數的倍數或者因子。hive根據y的大小,決定抽樣的比例。例如,table總共分了64份,當y=32時,抽取【64/32】2個bucket的數據,當y=128時,抽取【64/128】1/2個bucket的數據。x表示從哪個bucket開始抽取。例如,table總bucket數為32,tablesample(bucket 3 out of 16),表示總共抽取【32/16】2個bucket的數據,分別為第3個bucket和第【3+16】19個bucket的數據。

6.創建分桶表

  執行:
    create table psnbucket(id INT,name STRING,age INT) clustered by (age) into 4 buckets row format delimited fields terminated by ‘,‘;

Hive分桶