预先知道Hive行将进入哪个存储桶

问题描述 投票:0回答:1

[当我们在某个列上定义了存储桶时,hive为该列的每个唯一值计算哈希值,并将行发送到这些存储桶。当多个唯一值的哈希值导致它们进入同一存储桶时,这可能会导致存储桶倾斜。现在,假设存储桶列为国家/地区,其值如下:-

country = {'USA','Brazil','Findland','India','England'}

现在无法保证散列会将所有5个国家/地区发送到不同的存储桶(假设存储桶数为5)。有什么办法可以预先知道将特定国家/地区值的行发送到哪个存储桶?我正在寻找这样的东西:-

select know_which_bucket(country,5) from table;

它不一定是蜂巢函数,我只是想从逻辑上解释我在寻找什么,我只需要信息。基本上,我将指定一组值,存储桶数,并想知道每个值将进入哪个存储桶。如果有人可以为此提供Java指针,那么它也会有所帮助。另外,我不一定要寻找编程方式,即使是在线计算器也可以。

hadoop hive
1个回答
0
投票

我想通了,这就是你的做法:-

例如,如果存储桶数为5,则要知道哪个存储桶(文件)'USA'将去:

select pmod(hash('USA'),5);

它返回3,因此它将存储在文件00000 3

_ 0中。这样,我们可以知道任何输入值和任何数量的存储桶。
© www.soinside.com 2019 - 2024. All rights reserved.