配置单元在创建表时根据用户决定的值创建存储桶。hive根据列值散列函数将数据存储在每个bucket中 哈希函数(bucketing col值)mod num buckets 所以你的情况是 bucketing\u col\u value mod num\u buckets桶数 基于具有相同哈希值的所有记录将放在同一分区中。假设主题列有20个从1到20的不同值。所以
1 mod 6 = 1 = will go in 1st bucket
2 mod 6 = 2 = will go in 2nd bucket
3 mod 6 = 3 = will go in 3rd bucket
4 mod 6 = 4 = will go in 4th bucket
5 mod 6 = 5 = will go in 5th bucket
6 mod 6 = 6 = will go in 6th bucket
7 mod 6 = 1 = will go in 1st bucket
8 mod 6 = 2 = will go in 2nd bucket
.
.
.
So on..
2条答案
按热度按时间fxnxkyjh1#
在bucketing配置单元期间,根据哈希函数对值进行分组。还有一条经验法则是桶的数量是2的幂。如果将此规则应用于所有表,则可以按列优化连接。
如果只想将相同的值分组在一起,就必须使用按列划分的方法。在这种情况下,目录的数量等于不同值的数量,每个目录只有一个值。
f1tvaqid2#
配置单元在创建表时根据用户决定的值创建存储桶。hive根据列值散列函数将数据存储在每个bucket中
哈希函数(bucketing col值)mod num buckets
所以你的情况是
bucketing\u col\u value mod num\u buckets桶数
基于具有相同哈希值的所有记录将放在同一分区中。假设主题列有20个从1到20的不同值。所以
所以根据你的问题,这两种情况都是真实的
第一:bucket将所有相同的值分组
是的,因为具有相同值的数据将具有相同的哈希值,这意味着它将放在相同的存储桶中
第二:bucket将根据hash函数对数据进行分组
就像我之前展示的,bucket将根据数据的散列值来划分数据。
如果您注意到在查询的数据加载阶段,reducer的数量和目标表中bucket的数量相同。
我希望你现在明白了