在不使用配置单元中现有哈希函数的情况下计算哈希

uxhixvfz  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(356)

我想计算配置单元中字符串的哈希值,而不使用现有函数编写任何自定义项。这样我就可以用类似的方法在其他语言中得到一致的散列。例如:有没有什么函数可以用来做一些事情,比如添加字符或执行xor。

lhcgjxsq

lhcgjxsq1#

这取决于Hive的版本,参见。https://cwiki.apache.org/confluence/display/hive/languagemanual+udf#languagemanualudf-其他功能 select XYZ, hash(XYZ) from ABC 已经有多年的历史了 java.lang.String.hashCode() ,返回int(32位哈希)
[编辑2]实际上它有点复杂,因为 hash() 接受任何类型的参数列表(包括没有内置哈希方法的基元类型),因此使用了一种自定义方法--check ObjectInspectorUtils.hashCode() 以及 ObjectInspectorUtils.getBucketHashCode() 在这里的源代码中(对于v2.1) select XYZ, crc32(XYZ) from ABC 需要配置单元1.3并应用普通的旧循环冗余检查(可能通过 java.util.zip.CRC32 ),返回bigint(32位哈希) select XYZ, md5(XYZ), sha1(XYZ), sha2(XYZ,256), sha2(XYZ,512) from ABC 需要Hive1.3并应用强大的加密哈希函数,返回二进制的十六进制表示形式的字符串(128、160、256和512位哈希)
[edit 1]这篇文章的答案还提供了一个非常好的解决方法,可以使用apache commons静态方法和 reflect() .

相关问题