Hive 配置单元Bucketing:不同列值的数量大于Bucketing编号的数量

Hive 配置单元Bucketing:不同列值的数量大于Bucketing编号的数量,hive,bigdata,hiveql,hadoop-partitioning,Hive,Bigdata,Hiveql,Hadoop Partitioning,在hive中,假设我有一个拥有1000条记录的表雇员,并且我正在使用主题列。 主题列的总不同值是20,但我的存储桶总数是6。 洗牌是如何发生的 在理解扣球时,我遇到了两件事 第一:铲斗将所有相同的值和 第二:Bucket将根据哈希函数对数据进行分组。 对于上述场景,HIVE使用哪种方法(第一种或第二种)来洗牌数据?帮助我理解。在bucketing过程中,蜂窝组的值基于哈希函数。还有一条经验法则是桶数的幂为2。如果将此规则应用于所有表,则可以通过bucket列优化联接 如果只想将相同的值分组在一起

在hive中,假设我有一个拥有1000条记录的表雇员,并且我正在使用主题列。 主题列的总不同值是20,但我的存储桶总数是6。 洗牌是如何发生的

在理解扣球时,我遇到了两件事 第一:铲斗将所有相同的值和 第二:Bucket将根据哈希函数对数据进行分组。
对于上述场景,HIVE使用哪种方法(第一种或第二种)来洗牌数据?帮助我理解。

在bucketing过程中,蜂窝组的值基于哈希函数。还有一条经验法则是桶数的幂为2。如果将此规则应用于所有表,则可以通过bucket列优化联接


如果只想将相同的值分组在一起,则必须按列使用分区。在这种情况下,目录的数量等于不同值的数量,每个目录只有一个值。

配置单元在创建表时根据用户决定的值创建存储桶。 配置单元根据列值散列函数将数据存储在每个存储桶中 你可以想一想

散列函数(bucketing列值)mod num bucket

因此,在你的情况下,它将类似于

bucketing_col_value mod num_buckets

基于此,具有相同哈希值的所有记录都将进入同一分区。 假设主题列有20个从1到20的不同值。 所以

所以根据你的问题,这两种情况都适用于bucketing案例

第一:铲斗将所有相同的值分组

是的,因为具有相同值的数据将具有相同的哈希值,这意味着它将放在相同的存储桶中

第二:Bucket将根据哈希函数对数据进行分组

正如我前面所展示的,bucket将根据数据的散列值来划分数据

若您注意到在查询的数据加载阶段,减缩器的数量和目标表中的存储桶数量相同

我希望你现在明白了

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..