内置的 Apache Hive 哈希函数是如何工作的,我在哪里可以找到该文档?

How does the built-in Apache Hive hash function work and where can I find that documentation?

我正在使用 Apache Hive,需要确定内置哈希函数的工作原理。我发现 this 页面在 杂项下列出了 hash。函数 部分。它说 hash 已可用 "As of Hive 0.4"。

我只想查看有关其具体功能的一些文档。它是确定性的吗?给定相同的输入,它总是会产生相同的输出吗?我应该期待多少次碰撞?

根据定义,哈希函数是确定性的,参见。 https://en.wikipedia.org/wiki/Hash_function#Determinism
因此,如果 hash() 的实现不是确定性的,那么它就是一个错误,并且有人会注意到!

警告:该实现可能会发生变化(和错误修复),因此确定性仅代表给定版本的 Hive。


Hive 是开源的。按照 Apache 标准,文档还不错,但仍然不完整。只需检查源代码 => https://github.com/apache/hive

例如对于 Hive 2.1:

  • 定义了 hash() 函数 (Hive 术语中的 UDF) here
  • 它只是调用 ObjectInspectorUtils.getBucketHashCode(),它在每个参数上调用 ObjectInspectorUtils.hashCode(),然后将它的散列合并到一个全局 "bucket" 散列中——定义为 here
  • 评论显示 Hive 实现的(粗略的)散列方法源自 String.hashCode()


有关 Hive 中的替代哈希函数,请参阅 Calculate hash without using exisiting hash fuction in Hive,但答案基本上指向您已找到的同一文档页面。