在Hive中不使用现有哈希函数计算哈希

时间:2017-02-09 13:56:34

标签: hive

我想计算hive中字符串的哈希,而不使用现有函数编写任何UDF。这样我就可以使用类似的方法在其他语言中获得一致的哈希值。对于ex:是否有任何函数用于我可以做的事情,如添加字符或采取Xor。

1 个答案:

答案 0 :(得分:1)

这取决于Hive的版本,参见https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-Misc.Functions

select XYZ, hash(XYZ) from ABC
多年来一直可用并应用普通旧java.lang.String.hashCode(),返回INT(32位哈希)

[编辑2]实际上它有点复杂,因为hash()接受任何类型的参数列表(包括没有内置散列方法的基本类型),所以a使用自定义方法 - 检查源代码here中的ObjectInspectorUtils.hashCode()ObjectInspectorUtils.getBucketHashCode()(适用于V2.1)

select XYZ, crc32(XYZ) from ABC
需要Hive 1.3并应用普通的旧循环冗余校验(可能通过java.util.zip.CRC32),返回BIGINT(32位散列)

select XYZ, md5(XYZ), sha1(XYZ), sha2(XYZ,256), sha2(XYZ,512) from ABC
需要Hive 1.3并应用强大的加密哈希函数,返回带有二进制十六进制表示的STRING(128,160,256和512位哈希)


[编辑1] that post的答案也有一个非常好的解决方法,可以使用旧版本的Hive应用加密哈希函数,使用Apache Commons静态方法和{ {1}}。