[当我们在某个列上定义了存储桶时,hive为该列的每个唯一值计算哈希值,并将行发送到这些存储桶。当多个唯一值的哈希值导致它们进入同一存储桶时,这可能会导致存储桶倾斜。现在,假设存储桶列为国家/地区,其值如下:-
country = {'USA','Brazil','Findland','India','England'}
现在无法保证散列会将所有5个国家/地区发送到不同的存储桶(假设存储桶数为5)。有什么办法可以预先知道将特定国家/地区值的行发送到哪个存储桶?我正在寻找这样的东西:-
select know_which_bucket(country,5) from table;
它不一定是蜂巢函数,我只是想从逻辑上解释我在寻找什么,我只需要信息。基本上,我将指定一组值,存储桶数,并想知道每个值将进入哪个存储桶。如果有人可以为此提供Java指针,那么它也会有所帮助。另外,我不一定要寻找编程方式,即使是在线计算器也可以。
我想通了,这就是你的做法:-
例如,如果存储桶数为5,则要知道哪个存储桶(文件)'USA'将去:
_ 0中。这样,我们可以知道任何输入值和任何数量的存储桶。select pmod(hash('USA'),5);
它返回3,因此它将存储在文件00000 3