hive分桶管理

分桶:按照用户创建表时指定的分桶字段进行hash散列多个文件

1.hive分桶的原理

跟MR中的HashPartitioner的原理一模一样

 

         MR中:按照key的hash值去模除以reductTask的个数

         Hive中:按照分桶字段的hash值去模除以分桶的个数


2.hive分桶的作用

好处:
1、方便抽样
2、提高join查询效率

3.hive分桶和分区的区别

分桶表和分区表的 桶数 和 分区数的 决定机制:

分桶表的个数:由用户的HQL语句所设置的reduceTask的个数决定

表的分区的个数:也能由用户自定义指定。也能由程序自动生成, 分区是可以动态增长的

分桶表和分区表的个数的区别:
分桶表是一经决定,就不能更改,所以如果要改变桶数,要重新插入分桶数据
分区数是可以动态增长的
log日志
一天存一个分区

分桶表和分区表中数据的表现:
1、分桶表中的每个分桶中的数据可以有多个key值
2、分区表中的每个分区只有一个 key值

4.hive分桶的操作

首先创建一个分桶的空表,注意:是分桶的空表

然后创建个临时表,往临时表导入数据

然后在从临时表中分桶查询出来的数据insert到分桶的空表里


4.1创建分桶表

create table bck_student(id int,name string,sex string, age int,department string) clustered by(sex) into 2 buckets row format delimited fields terminated  by ",";


4.2创建临时表并导入数据

create table student(id int,name string,sex string, age int,department string)  row format delimited fields terminated  by ",";
load data local inpath "/home/hadoop/student.dat"  into table student;
select * from sutdent;
hive分桶管理_第1张图片

4.3从临时表中分桶查询出来的数据insert到分桶的空表里

开启分桶
set  hive.enforce.bucketing =true;
set mapreduce.job.reduces=2;
 注意:上面代码中的set mapreduce.job.reduces的数量要和分桶数量一样
insert into table bck_student select id,name,sex,age,department from student distribute by sex;  

hive分桶管理_第2张图片

4.4查看分桶结果

hive分桶管理_第3张图片






你可能感兴趣的:(hive)