分桶表优化:高效数据抽取与查询性能提升

分桶表意义:

1、为了抽样
2、为了提高连接、查询效率
体现如下:1、数据定位,分桶表通过哈希算法,把数据分散到不同桶中,在进行查询时可以根据查询条件的哈希值快速定位到要查询的桶中。2、并行处理:桶之间是独立的存储单元,可以并行访问处理,在查询是,可以并行访问多个桶,提高查询效率。3、分桶表数据分布均衡

规则

按照分桶字段 哈希值 除以分桶数 取余

语法

创建

create table tb_bucket_9 (
    id int,
    name string,
    story_id int
)
clustered by (story_id) into 9 buckets --不带排序
clustered by (story_id) sorted by (story_id) into 9 buckets --带排序

抽样

select * from 表名 tablesample(bucket x out of y on)
y决定要几桶 num=表的桶数/y   
x决定要第几桶
select * from tb_bucket_9 tablesample ( bucket 3 out of 3 on story_id);--num=9/3  一共抽三桶,分别是第3、6、9桶
select * from tb_bucket_9 tablesample ( bucket 1 out of 18 on story_id);--num=9/19 一共抽1/2桶,在第一桶中

提高连接效率

1、map join优化,适用于大表和小表关联,把小表放到内存里,在map端就开始join,缓解reduce压力
2、bucket map join优化,适用于一个表的bucket数 是另一个表bucket数的整数倍。将两个表都按照相同的分桶字段进行分桶,然后将每个桶加载到内存中进行关联操作。
3、sort merge bucket map join优化,smb map join的适用场景是在一个大表和一个或多个小表进行关联查询,并且大表的数据可以分区且可以排序,排序后放入内存,小表根据关联字段在大表分区中进行二分查找

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值