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中的数据存储:

记得加油学习哦^_^
原文地址:https://www.cnblogs.com/shaoyayu/p/13434290.html