首页 > 其他 > 详细

hive分桶表bucketed table分桶字段选择与个数确定

时间:2019-08-06 23:12:05      阅读:117      评论:0      收藏:0      [点我收藏+]

为什么分桶

(1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接 (Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。

(2)提升采样(sampling)效率;

什么时候分桶

需要Map-side join 和 sampling时

选什么字段分桶

1.int类型字段比较友好

2.取hash后各分区块数据量比较均匀的字段

3.join的连接字段

当join连接的字段值取hash不够均匀时,多取一个其它字段作为分桶字段;

分桶公式:

 bucket num = hash_function(bucketing_column) mod num_buckets

列的值做哈希取余 决定数据应该存储到哪个桶

列的值重复率越小越好,比如id

设置多少个  INTO 个数 BUCKETS

当数据量够大时设置为约等于≈128M的倍数

当数据量不够大时考虑,计算的并行度(比如129MB设置2 或者4 )

bucket个数会决定在该表或者该表的分区对应的hdfs目录下生成对应个数的文件,而mapreduce的个数是根据文件块的个数据确定的map个数。

hive分桶表bucketed table分桶字段选择与个数确定

原文:https://www.cnblogs.com/jottings/p/11312230.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!