分区表分的是文件夹,分通表分的是 文件
分桶表将整个数据内容按照某列属性值的哈希值进行区分,使用该哈希值除以桶的个数得到取余数,余数决定了该条记录会被分在哪个桶中。余数相同的记录会分在一个桶里。
对分桶表操作
将数据按照指定的字段进行分成多个桶中去,就是按照分桶字段进行哈希划分到多个文件当中去
分区就是分文件夹,分桶就是分文件
分桶优点:
提高join查询效率
提高抽样效率
• 开启hive的捅表功能
set hive.enforce.bucketing=true;
• 设置reduce的个数
set mapreduce.job.reduces=3;
• 创建桶表
create table course (c_id string,c_name string) clustered by(c_id) into 3 buckets;
桶表的数据加载:由于桶表的数据加载通过hdfs dfs -put文件或者通过load data均不可以,只能通过insert overwrite 进行加载
所以把文件加载到桶表中,需要先创建普通表,并通过insert overwrite的方式将普通表的数据通过查询的方式加载到桶表当中去
• 通过insert overwrite给桶表中加载数据
insert overwrite table course select * from course_common cluster by(c_id); -- 最后指定桶字段
set hive.enforce.bucketing=true;
set mapreduce.job.reduces=3;
create table course (
c_id string,
c_name string)
clustered by(c_id) into 3 buckets;
create table course_common (
c_id string,
c_name string)
insert into course_common values('1','李明'),
('3','张三')