繁体   English   中英

提前知道 Hive 行将是 go 的哪个桶

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM