hive - Hive Bucketing:不同列值的数量大于桶数的数量
问题描述
在 hive 中,假设我有一个有 1000 条记录的表员工,并且我正在使用主题列进行存储。主题列的总不同值是 20,但我的桶总数是 6。改组是如何发生的?
在理解分桶时,我遇到了两件事:第一:桶将分组所有相同的值,第二:桶将根据哈希函数对数据进行分组。对于上述场景,HIVE 使用哪种方法(第一种或第二种)来洗牌数据?帮助我理解。
解决方案
Hive 根据用户在创建表时决定的值创建存储桶。hive 根据列值哈希函数将数据存储在每个存储桶中,您可以想像
hash_function(bucketing_col_value) mod num_buckets
所以在你的情况下,它会像
bucketing_col_value mod num_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..
所以根据你的问题,这两种情况在分桶情况下都是正确的
1st :Bucket 将所有相同的值分组
是的,因为具有相同值的数据将具有相同的哈希值,这意味着它将进入相同的存储桶
2nd:Bucket会根据Hash函数对数据进行分组
就像我之前展示的那样,存储桶将根据数据的哈希值划分数据。
如果您在查询中的数据加载阶段注意到减速器的数量与目标表中的存储桶数量相同。
我希望你现在清楚
推荐阅读
- python - 为什么我的 QSplitter 的 QSplitterHandles 拒绝格式化?
- sql - 如何将数据集拆分为多个子集并将其导出到 Excel
- amazon-web-services - AWS IoT 设备在线/离线检查
- javascript - Firebase @firebase/数据库PERMISSION_DENIED
- firebase - 使用 firebase/firestore JS SDK 过滤掉文档 ID 子集的最佳方法?
- apache - `NameError: name 'TypeError' is not defined` 在 Apache (mod_wsgi)
- html - 如何制作一个角度弹出窗口?
- list - 如何通过应用于它们各自的第一个和第二个值的谓词过滤具有 (Int, Int) 值的元组列表?
- r - confint-南生产
- apache-kafka - 在 kafa 消费者应用程序中处理不同分区和偏移量上的重复项