联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
4.4.6 分桶表
更新时间:10/30/2023, 9:40:41 AM
分桶

通过分桶键哈希取模(key hashcode %N)的方式,将表或分区中的数据随机、均匀地分发

在报表展示场景中,需要经常构建主题宽表。例如查询每月每个消费者的消费总金额,通过 hash bucket 可以将 customer_name 相同的数据放在一个“桶”中。在使用 customer_name 进行查询时,能够减少扫描范围。

与 Hive 和 Inceptor 不同,ArgoDB 在创建分桶表时,能够根据表大小自动分桶(分桶数与磁盘数量有关),因此可以不指定分桶个数。

应用场景

  • 分桶查询:直接使用分桶键作为查询条件,可以加速等值查询。

  • bucket join:在多表 join 场景中,join 条件是分桶键并且分桶数相同时,可以通过 bucket join 提高 join 效率。

分桶策略

支持多列分桶:一般选择高基数的列作为分桶键(例如主键),使得数据尽可能的分布均匀。如果分桶键存在数据倾斜,可以考虑使用多列分桶。

创建分桶表
例 16. 创建一张按 trans_id 分桶的表
Create table orders_bucket(
trans_id int,
acc_num int,
trans_time date,
trans_type string,
stock_id string,
price decimal,
amount int)
clustered by (trans_id)
stored as holodesk;
复制
  • 每条数据的 trans_id 都不同,trans_id 作为分桶键可以更均为的切分数据。

  • 当 trans_id 作为 join列 时,可以通过 bucket join 加速查询,具体请参考《Tranwarp ArgoDB 优化指南》。

分桶查询
例 17. 查询分桶 trans_id = 943197522 中的数据
select trans_id , acc_num ,trans_time ,trans_type ,stock_id , price ,amount from orders_bucket where trans_id = 943197522 ;
复制