[英]Knowing in advance which bucket a Hive row will go
当我们在某个列上定义了一个分桶时,hive 为该列的每个唯一值计算 hash 值并将行发送到这些桶。 当多个唯一值的 hash 值导致它们进入同一个存储桶时,这可能会导致存储桶倾斜。 现在假设桶列是国家,值如下:-
country = {'USA','Brazil','Findland','India','England'}
现在不能保证散列会将所有 5 个国家发送到不同的桶(假设桶的数量是 5)。 有什么方法可以提前知道将针对国家/地区具有特定值的行发送到哪个存储桶? 我正在寻找这样的东西: -
select know_which_bucket(country,5) from table;
它不必是 hive function,我只是想从逻辑上解释我在寻找什么,我只需要信息。 基本上我会指定一组值,桶的数量,并想知道每个值将 go 到哪个桶。 如果有人可以为此提供 Java 指针,它也会有所帮助。 另外,我不一定要寻找一种程序化的方式,即使是在线计算器也可以。
我想通了,这就是你的做法:-
例如,要知道哪个桶(文件)“美国”将 go,前提是桶数为 5:-
select pmod(hash('USA'),5);
它返回 3,因此这将存储在文件 00000 3 _0 中。 这样我们就可以知道任何输入值和任何数量的桶。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.