桶表

桶表:
桶是将表的列通过Hash算法进一步分解成不同的文件存储。
对指定列计算hash值,根据hash值切分数据,目的是为了并行。
每一个桶对应一个文件(注意和分区的区别),一个作业产生的桶输出文件和reduce任务个数相同。分区是粗粒度的划分,桶是细粒度的划分,这样可以让查询发生在小范围的数据上,提高查询效率,适合进行表连接查询,适合用于采样分析。
桶表的特点: 为了取样更高效 为了获取更好的查询处理效率
Hive使用对分桶所用的值进行哈希,并用哈希结果除以桶的个数做取余运算的方式来分桶,保证了每个桶中都有数据,但每个桶中的数据条数不一定相等。
关键字clustered。
create table student4(sno int,sname string,sex string,sage int, sdept string) clustered by(sno) into 3 buckets row format delimited fields terminated by ‘,’;
set hive.enforce.bucketing = true;强制分桶。
load data local inpath ‘/home/hadoop/hivedata/students.txt’ overwrite into table student4;
分析:虽然设置了强制分桶,但实际student4表下面只有一个students一个文件。分桶也就是分区,分区数量等于文件数,所以上面方法并没有分桶。
create table stu_buck(sno int,sname string,sex string,sage int,sdept string)
clustered by(sno)
sorted by(sno DESC)
into 4 buckets
row format delimited fields terminated by ‘,’;
#设置变量,设置分桶为true, 设置reduce数量是分桶的数量个数
set hive.enforce.bucketing = true;
set mapreduce.job.reduces=4;
#可以往创建的分通表插入数据(插入数据需要是已分桶, 且排序的)
#可以使用distribute by(sno) sort by(sno asc) 或是排序和分桶的字段相同的时候使用Cluster by(字段)
#注意使用cluster by , 就等同于分桶+排序(sort)
导入数据
insert into table stu_buck
select sno,sname,sex,sage,sdept from student distribute by(sno) sort by(sno asc);
先分区在进行分桶

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值