跳到主要内容

MURMUR_HASH3_U64_V2

描述

计算无符号 64 位 murmur3 hash 值。有符号整形版本参考murmur_hash3_64_v2

MURMUR_HASH3_64的区别是:此版本复用 MurmurHash3 的 128 位处理函数,仅输出第一个 64 位哈希值,与标准库的行为保持一致。

-注:经过测试 xxhash_64 的性能大约是 murmur_hash3_64_v2 的 2 倍,所以在计算 hash 值时,更推荐使用xxhash_64,而不是murmur_hash3_64。如需更优的 64 位 MurmurHash3 性能,可考虑使用 murmur_hash3_64

备注

自 4.1.0 版本起支持此函数。

语法

MURMUR_HASH3_U64_V2( <str> [ , <str> ... ] )

参数

参数描述
<str>要计算无符号 64 位 MurmurHash3 哈希的值

返回值

返回输入字符串的无符号 64 位 MurmurHash3 哈希值,类型为 LARGEINT。

如果任何参数为 NULL,则返回 NULL。

示例

select murmur_hash3_u64_v2(null), murmur_hash3_u64_v2("hello"), murmur_hash3_u64_v2("hello", "world");
+----------------------------+-------------------------------+----------------------------------------+
| murmur_hash3_u64_v2(null) | murmur_hash3_u64_v2("hello") | murmur_hash3_u64_v2("hello", "world") |
+----------------------------+-------------------------------+----------------------------------------+
| NULL | 14688674573012802306 | 17783800982478351481 |
+----------------------------+-------------------------------+----------------------------------------+
-- 该函数输出无符号 64 位整形
SELECT
mmhash3_64_v2,
mmhash3_u64_v2,
i64_to_ui64 = mmhash3_u64_v2 AS is_equal
FROM (
SELECT
murmur_hash3_64_v2('1013199993_1756808272') AS mmhash3_64_v2,
murmur_hash3_u64_v2('1013199993_1756808272') AS mmhash3_u64_v2,
CAST(murmur_hash3_64_v2('1013199993_1756808272') AS LARGEINT) & 18446744073709551615 AS i64_to_ui64
) t;
+----------------------+----------------------+----------+
| mmhash3_64_v2 | mmhash3_u64_v2 | is_equal |
+----------------------+----------------------+----------+
| -2648103510258542450 | 15798640563451009166 | 1 |
+----------------------+----------------------+----------+