桶是更细力度的划分,把表划分为桶的理由:
1.取样更高效。具体划分桶是按值进行hash,然后除以桶的个数取余,任何一个桶内都是一个随机划分的用户集合。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。
2.获得更高的查询处理效率。桶为表加上了额外的结构,Hive在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用Map端连接(Map-side join)高效的实现。处理左边表的某个桶的mapper就知道右边表内相匹配的行在对应的桶,这样mapper直接就可以在对应的右边表的桶获取数据进行join。并不一定要求两个表必须有相同的桶个数,倍数关系也可以。
具体划分桶是将值进行hash,然后除以桶的个数取余。