我想计算配置单元中字符串的哈希值,而不使用现有函数编写任何自定义项。这样我就可以用类似的方法在其他语言中得到一致的散列。例如:有没有什么函数可以用来做一些事情,比如添加字符或执行xor。
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() .
select XYZ, hash(XYZ) from ABC
java.lang.String.hashCode()
hash()
ObjectInspectorUtils.hashCode()
ObjectInspectorUtils.getBucketHashCode()
select XYZ, crc32(XYZ) from ABC
java.util.zip.CRC32
select XYZ, md5(XYZ), sha1(XYZ), sha2(XYZ,256), sha2(XYZ,512) from ABC
reflect()
1条答案
按热度按时间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()
接受任何类型的参数列表(包括没有内置哈希方法的基元类型),因此使用了一种自定义方法--checkObjectInspectorUtils.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()
.