哈希函数
哈希函数可用于以确定性的伪随机方式打乱元素顺序(洗牌)。
Simhash 是一种哈希函数,对于相近(相似)的参数会返回相近的哈希值。
大多数哈希函数可以接受任意数量、任意类型的参数。
NULL 的哈希值为 NULL。要对 Nullable 列获取非 NULL 的哈希值,请将其包装在一个元组(tuple)中:
要计算整张表全部内容的哈希,可以使用 sum(cityHash64(tuple(*)))(或其他哈希函数)。tuple 确保包含 NULL 值的行不会被忽略,sum 确保行的顺序不会影响结果。
BLAKE3
引入版本:v22.10
计算 BLAKE3 哈希值,并将得到的字节数组作为 FixedString 返回。 该密码学哈希函数通过 BLAKE3 Rust 库集成到 ClickHouse 中。 该函数速度相当快,与 SHA-2 相比性能大约快两倍,同时生成的哈希长度与 SHA-256 相同。 它返回一个类型为 FixedString(32) 的字节数组形式的 BLAKE3 哈希值。
语法
参数
message— 要进行哈希计算的输入字符串。String
返回值
返回输入字符串的 32 字节长 BLAKE3 哈希值,类型为定长字符串。FixedString(32)
示例
hash
MD4
在 v21.11 中引入
计算给定字符串的 MD4 哈希值。
语法
参数
s— 要进行哈希计算的输入字符串。String
返回值
返回给定输入字符串的 MD4 哈希值,结果为定长字符串。FixedString(16)
示例
使用示例
MD5
自 v1.1 起提供
计算给定字符串的 MD5 哈希值。
语法
参数
s— 用于计算哈希的输入字符串。String
返回值
返回给定输入字符串的 MD5 哈希值,作为定长字符串。FixedString(16)
示例
用法示例
RIPEMD160
自 v24.10 起引入
计算给定字符串的 RIPEMD-160 哈希值。
语法
参数
s— 要计算哈希值的输入字符串。String
返回值
返回给定输入字符串的 RIPEMD160 哈希值,作为定长字符串。FixedString(20)
示例
用法示例
SHA1
引入版本:v1.1
计算给定字符串的 SHA1 哈希值。
语法
参数
s— 要进行哈希运算的输入字符串String
返回值
返回给定输入字符串的 SHA1 哈希值,类型为定长字符串。FixedString(20)
示例
用法示例
SHA224
引入版本:v1.1
计算给定字符串的 SHA224 哈希值。
语法
参数
s— 要计算哈希值的输入字符串。String
返回值
返回给定输入字符串的 SHA224 哈希值,以定长字符串形式表示。FixedString(28)
示例
用法示例
SHA256
自 v1.1 引入
计算给定字符串的 SHA256 哈希值。
语法
参数
s— 要进行哈希计算的输入字符串。String
返回值
返回给定输入字符串的 SHA-256 哈希值,作为定长字符串。FixedString(32)
示例
用法示例
SHA384
引入版本:v1.1
计算给定字符串的 SHA384 哈希值。
语法
参数
s— 要进行哈希的输入字符串。String
返回值
返回给定输入字符串的 SHA384 哈希值,结果为定长字符串。FixedString(48)
示例
用法示例
SHA512
自 v1.1 起引入
计算给定字符串的 SHA512 哈希值。
语法
参数
s— 要进行哈希计算的输入字符串String
返回值
返回给定输入字符串的 SHA512 哈希,结果为定长字符串类型 FixedString(64)。
示例
用法示例
SHA512_256
在 v1.1 中引入
计算给定字符串的 SHA512_256 哈希值。
语法
参数
s— 要进行哈希计算的输入字符串。String
返回值
返回给定输入字符串的 SHA512_256 哈希值,作为固定长度字符串。FixedString(32)
示例
用法示例
URLHash
引入于:v1.1
一种针对通过某种归一化方式从 URL 获取的字符串的快速、质量良好的非加密哈希函数。
此哈希函数有两种模式:
| 模式 | 描述 |
|---|---|
URLHash(url) | 从字符串计算哈希值,如果末尾存在 /、? 或 # 中的一个符号,则会先去掉该符号。 |
URLHash(url, N) | 从字符串计算哈希值,计算到 URL 层级中的第 N 级为止;如果末尾存在 /、? 或 # 中的一个符号,则会先去掉该符号。层级的定义与 URLHierarchy 中相同。 |
语法
参数
返回值
返回对 url 计算得到的哈希值。UInt64
示例
用法示例
按指定级别计算的 URL 哈希值
cityHash64
引入于:v1.1
生成 64 位的 CityHash 哈希值。
这是一种快速的非加密哈希函数。 它对字符串参数使用 CityHash 算法,对其他数据类型的参数使用依赖具体实现的快速非加密哈希函数。 该函数使用 CityHash 组合函数来得到最终结果。
在 CityHash 被集成进 ClickHouse 之后,Google 更改了 CityHash 的算法。 换句话说,ClickHouse 的 cityHash64 与 Google 上游的 CityHash 现在会产生不同的结果。 ClickHouse 的 cityHash64 对应 CityHash v1.0.2。
对于相同输入值但参数类型不同的情况,计算得到的哈希值可能相同。
例如,这会影响不同大小的整数类型、具有相同数据的具名和未具名 Tuple,以及具有相同数据的 Map 和对应的 Array(Tuple(key, value)) 类型。
语法
参数
arg1[, arg2, ...]— 用于计算哈希值的可变数量的输入参数。Any
返回值
返回对输入参数计算得到的哈希值。UInt64
示例
调用示例
计算整张表的校验和(精确到行顺序)
farmFingerprint64
引入版本:v20.12
使用 Fingerprint64 方法生成一个 64 位的 FarmHash 值。
与 farmHash64 相比,farmFingerprint64 更适合用于生成稳定且可移植的值。
对于不同参数类型但输入值相同的情况,计算得到的哈希值可能相同。
例如,这会影响不同大小的整数类型、具有相同数据的具名和未具名 Tuple,以及具有相同数据的 Map 类型和对应的 Array(Tuple(key, value)) 类型。
语法
参数
arg1[, arg2, ...]— 数量可变的输入参数,用于计算其哈希值。Any
返回值
返回对输入参数计算得到的哈希值。UInt64
示例
使用示例
farmHash64
引入版本:v1.1
使用 Hash64 方法生成 64 位的 FarmHash。
如需稳定且可移植的值,推荐使用 farmFingerprint64。
对于不同参数类型但输入值相同的情况,计算得到的哈希值可能会相同。
例如,不同大小的整数类型、具有相同数据的已命名和未命名 Tuple,以及具有相同数据的 Map 与对应的 Array(Tuple(key, value)) 类型,都会受到影响。
语法
参数
arg1[, arg2, ...]— 需要计算哈希值的数量可变的输入参数。Any
返回值
返回输入参数计算得到的哈希值。UInt64
示例
用法示例
gccMurmurHash
自 v20.1 引入
使用与 GCC 相同的种子,计算输入值的 64 位 MurmurHash2 哈希值。
在使用 Clang 和 GCC 构建的程序之间具有可移植性。
语法
参数
arg1[, arg2, ...]— 数量可变的参数,用于计算哈希值。Any
返回值
返回对输入参数计算所得的哈希值。UInt64
示例
用法示例
halfMD5
引入于:v1.1
将所有输入参数重新解释为字符串,并为每个参数计算 MD5 哈希值。然后将这些哈希值组合起来,对所得字符串计算哈希,取其前 8 个字节,并按大端字节序将其解释为 UInt64。该函数相对较慢(每个处理器核心每秒约 500 万个短字符串)。
建议改用 sipHash64 函数。
该函数接收可变数量的输入参数。 参数可以是任意受支持的数据类型。 对于某些数据类型,即使参数类型不同(不同大小的整数、具有相同数据的具名和未具名 Tuple、以及具有相同数据的 Map 与对应的 Array(Tuple(key, value)) 类型),在相同取值时计算得到的哈希值也可能相同。
语法
参数
arg1[, arg2, ..., argN]— 要计算哈希值的可变数量的参数。Any
返回值
返回对给定输入参数计算得到的半 MD5 哈希值,结果以大端字节序的 UInt64 类型返回。UInt64
示例
使用示例
hiveHash
引入于:v20.1
从字符串计算一个 “HiveHash” 值。
它只是将符号位清零的 JavaHash。
此函数用于 3.0 之前版本的 Apache Hive。
此哈希函数性能较差。 仅在其他系统已使用该算法且你需要计算相同结果时才使用它。
语法
参数
arg— 要进行哈希计算的输入字符串。String
返回值
返回输入字符串计算得到的 “Hive 哈希值”。Int32
示例
用法示例
icebergHash
自 v25.5 版本引入
实现 iceberg 哈希变换 的逻辑
语法
参数
返回值
返回一个 32 位的 Murmur3 哈希值,x86 变体,种子为 0,类型为 Int32
示例
示例
intHash32
在 v1.1 中引入
计算整数的 32 位哈希值。
该哈希函数速度较快,但并非密码学哈希函数。
语法
参数
arg— 要进行哈希的整数。(U)Int*
返回值
返回输入整数计算得到的 32 位哈希码 UInt32
示例
用法示例
intHash64
自 v1.1 起引入。
计算整数的 64 位哈希值。
该哈希函数相对较快(甚至比 intHash32 还要快),但不是加密哈希函数。
语法
参数
int— 用于哈希的整数。(U)Int*
返回值
64 位哈希值。UInt64
示例
使用示例
javaHash
引入版本:v20.1
从以下类型计算 JavaHash 值:
此哈希函数性能不佳。 仅当该算法已在其他系统中使用且你需要计算相同结果时才使用它。
Java 仅支持对有符号整数计算哈希, 因此如果你想对无符号整数计算哈希,必须先将它们转换为 ClickHouse 中对应的有符号类型。
语法
参数
arg— 用于哈希计算的输入值。Any
返回值
返回 arg 的哈希值。Int32
示例
用法示例 1
使用示例 2
javaHashUTF16LE
引入于:v20.1
在假定字符串的字节表示为 UTF-16LE 编码的前提下,从字符串计算 JavaHash。
语法
参数
arg— 使用 UTF-16LE 编码的字符串。String
返回值
返回对 UTF-16LE 编码字符串计算得到的哈希值。Int32
示例
使用示例
jumpConsistentHash
自 v1.1 版本引入
为一个整数计算其 jump consistent hash。
语法
参数
返回值
返回计算得到的哈希值。Int32
示例
使用示例
kafkaMurmurHash
自 v23.4 起引入
使用与 Kafka 相同的种子,对输入值计算 32 位 MurmurHash2 哈希值,并清除最高位,以便与 Default Partitioner 兼容。
语法
参数
arg1[, arg2, ...]— 需要计算哈希值的数量可变的参数。Any
返回值
返回基于输入参数计算得到的哈希值。UInt32
示例
用法示例
keccak256
引入版本:v25.4
计算给定字符串的 Keccak-256 密码学哈希值。 此哈希函数广泛应用于区块链场景,尤其是以太坊(Ethereum)。
语法
参数
message— 要进行哈希计算的输入字符串。String
返回值
返回输入字符串的 32 字节 Keccak-256 哈希值,作为固定长度字符串。FixedString(32)
示例
用法示例
kostikConsistentHash
引入版本:v22.6
由 Konstantin 'Kostik' Oblakov 设计的 O(1) 时间和空间复杂度的一致性哈希算法。
仅在 n <= 32768 时效率较高。
语法
别名:yandexConsistentHash
参数
返回值
返回计算得到的哈希值。UInt16
示例
用法示例
metroHash64
自 v1.1 引入
生成一个 64 位的 MetroHash 哈希值。
对于不同参数类型但输入值相同的情况,计算得到的哈希值可能相同。
例如,这会影响不同大小的整数类型、包含相同数据的具名和非具名 Tuple,以及具有相同数据的 Map 与其对应的 Array(Tuple(key, value)) 类型。
语法
参数
arg1[, arg2, ...]— 数量可变的一组输入参数,用于计算哈希值。Any
返回值
返回对输入参数计算得到的哈希值。UInt64
示例
用法示例
murmurHash2_32
自 v18.5 版本引入
计算输入值的 MurmurHash2 哈希值。
对于不同参数类型但具有相同输入值的情况,计算得到的哈希值可能相同。
例如,这会影响不同长度的整数类型、包含相同数据的具名和非具名 Tuple,以及包含相同数据的 Map 与其对应的 Array(Tuple(key, value)) 类型。
语法
参数
arg1[, arg2, ...]— 要计算哈希的数量可变的输入参数。Any
返回值
返回对输入参数计算得到的哈希值。UInt32
示例
用法示例
murmurHash2_64
引入版本:v18.10
计算输入值的 MurmurHash2 散列值。
对于不同参数类型的相同输入值,计算得到的散列值可能会相同。
例如,这会影响不同大小的整数类型、具有相同数据的具名和非具名 Tuple,以及具有相同数据的 Map 与对应的 Array(Tuple(key, value)) 类型。
语法
参数
arg1[, arg2, ...]— 需要计算哈希值的一组数量可变的输入参数。Any
返回值
返回根据输入参数计算得到的哈希值。UInt64
示例
使用示例
murmurHash3_128
在 v18.10 中引入
计算输入值的 128 位 MurmurHash3 哈希值。
语法
参数
arg1[, arg2, ...]— 要计算哈希值的数量可变的输入参数。Any
返回值
返回输入参数计算得到的 128 位 MurmurHash3 哈希值。FixedString(16)
示例
使用示例
murmurHash3_32
自 v18.10 引入
生成一个 MurmurHash3 哈希值。
对于参数类型不同但输入值相同的情况,计算得到的哈希值可能会相同。
例如,这会影响不同大小的整数类型、具有相同数据的命名和未命名 Tuple,以及具有相同数据的 Map 与对应的 Array(Tuple(key, value)) 类型。
语法
参数
arg1[, arg2, ...]— 用于计算哈希值的数量不定的输入参数。Any
返回值
返回对输入参数计算得到的哈希值。UInt32
示例
使用示例
murmurHash3_64
引入于:v18.10
计算输入值的 MurmurHash3 哈希值。
对于不同参数类型但输入值相同的情况,计算得到的哈希值可能会相同。
例如,这会影响不同大小的整数类型、具有相同数据的具名和非具名 Tuple,以及具有相同数据的 Map 和对应的 Array(Tuple(key, value)) 类型。
语法
参数
arg1[, arg2, ...]— 需要计算哈希值的可变数量的输入参数。Any
返回值
返回输入参数的计算哈希值。UInt64
示例
使用示例
ngramMinHash
引入自:v21.1
将一个 ASCII 字符串按 ngramsize 个字符拆分为 n-gram,并为每个 n-gram 计算哈希值,返回包含这些哈希值的元组。
使用 hashnum 个最小哈希值来计算最小哈希,使用 hashnum 个最大哈希值来计算最大哈希。
区分大小写。
可与 tupleHammingDistance 一起使用来检测近似重复字符串。
对于两个字符串,如果返回的哈希值完全相同,则认为这两个字符串相同。
语法
参数
string— 要计算哈希值的字符串。Stringngramsize— 可选。n-gram 的大小,取值范围为1到25,默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希数量,取值范围为1到25,默认值为6。UInt8
返回值
返回一个包含两个哈希值(最小值和最大值)的元组。Tuple
示例
用法示例
ngramMinHashArg
引入于:v21.1
将 ASCII 字符串拆分成由 ngramsize 个符号组成的 n-gram,并返回哈希值最小和最大的 n-gram,这些哈希值由使用相同输入的 ngramMinHash 函数计算得到。
区分大小写。
语法
参数
string— 需要计算哈希的字符串。Stringngramsize— 可选。n-gram 的大小,取值为1到25之间的任意整数,默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希值的数量,取值为1到25之间的任意整数,默认值为6。UInt8
返回值
返回一个包含两个元组的元组,每个元组中包含 hashnum 个 n-gram。Tuple(String)
示例
使用示例
ngramMinHashArgCaseInsensitive
引入版本:v21.1
将一个 ASCII 字符串拆分成由 ngramsize 个符号组成的 n-gram 片段,并返回哈希值最小和最大的 n-gram,这些哈希值由使用相同输入的 ngramMinHashCaseInsensitive 函数计算得出。
该函数对大小写不敏感。
语法
参数
string— 需要计算哈希的字符串。Stringngramsize— 可选。n-gram 的长度,取值范围为1到25。默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希数量,取值范围为1到25。默认值为6。UInt8
返回值
返回一个包含两个元组的元组,每个元组各包含 hashnum 个 n-gram。Tuple(Tuple(String))
示例
使用示例
ngramMinHashArgCaseInsensitiveUTF8
引入版本:v21.1
将 UTF-8 字符串按 ngramsize 个符号划分为若干 n-gram,并返回哈希值最小和最大的 n-gram,这些哈希值由使用相同输入的 ngramMinHashCaseInsensitiveUTF8 函数计算得出。
该函数不区分大小写。
语法
参数
string— 要计算哈希值的字符串。Stringngramsize— 可选。n-gram 的大小,取值为1到25之间的任意数值。默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希值的数量,取值为1到25之间的任意数值。默认值为6。UInt8
返回值
返回一个元组,其中包含两个元组,每个元组中有 hashnum 个 n-gram。Tuple(Tuple(String))
示例
使用示例
ngramMinHashArgUTF8
引入版本:v21.1
将 UTF-8 字符串拆分为由 ngramsize 个符号组成的 n-gram,并返回哈希值最小和最大的 n-gram,这些哈希值由使用相同输入的 ngramMinHashUTF8 函数计算。
区分大小写。
语法
参数
string— 要计算哈希值的字符串。Stringngramsize— 可选。n-gram 的大小,取值为1到25之间的任意值。默认值为3。UInt8hashnum— 可选。用于计算结果的最小哈希值和最大哈希值的数量,取值为1到25之间的任意值。默认值为6。UInt8
返回值
返回一个元组,其中包含两个元组,每个元组包含 hashnum 个 n-gram。Tuple(Tuple(String))
示例
用法示例
ngramMinHashCaseInsensitive
引入于:v21.1
将一个 ASCII 字符串按长度为 ngramsize 的 n-gram 片段拆分,并计算每个 n-gram 的哈希值,返回包含这些哈希值的元组。
使用 hashnum 个最小哈希值来计算最小哈希,并使用 hashnum 个最大哈希值来计算最大哈希。
该函数不区分大小写。
可以配合 tupleHammingDistance 用于检测近似重复的字符串。
对于两个字符串,如果返回的哈希在两者之间完全相同,则这两个字符串相同。
语法
参数
string— 字符串。String。-ngramsize— n-gram 的大小。可选。可取值:从1到25的任意数。默认值:3。UInt8。-hashnum— 用于计算结果的最小和最大哈希值的数量。可选。可取值:从1到25的任意数。默认值:6。UInt8。
返回值
包含两个哈希值(最小值和最大值)的 Tuple。Tuple(UInt64, UInt64). Tuple
示例
使用示例
ngramMinHashCaseInsensitiveUTF8
引入版本:v21.1
将 UTF-8 字符串按 ngramsize 个字符拆分为 n-gram,并为每个 n-gram 计算哈希值,返回一个包含这些哈希值的元组。
使用 hashnum 个最小哈希值来计算最小哈希,并使用 hashnum 个最大哈希值来计算最大哈希。
对大小写不敏感。
可以与 tupleHammingDistance 结合使用以检测近似重复字符串。
对于两个字符串,如果返回的哈希在两者中完全相同,则这两个字符串被视为相同。
语法
参数
string— 要计算哈希值的字符串。Stringngramsize— 可选。n-gram 的长度,取值为1到25之间的任意数。默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希值的个数,取值为1到25之间的任意数。默认值为6。UInt8
返回值
返回一个包含两个哈希值(最小值和最大值)的元组。Tuple
示例
用法示例
ngramMinHashUTF8
引入于:v21.1
将一个 UTF-8 字符串划分为由 ngramsize 个符号组成的 n-gram,并为每个 n-gram 计算哈希值,然后返回包含这些哈希值的元组。
使用 hashnum 个最小哈希来计算最小哈希,并使用 hashnum 个最大哈希来计算最大哈希。
区分大小写。
可与 tupleHammingDistance 一起用于检测近似重复字符串。
对于两个字符串,如果两者返回的哈希完全相同,则认为这两个字符串相同。
语法
参数
string— 要计算哈希的字符串。Stringngramsize— 可选。n-gram 的大小,取值为1到25的任意数值。默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希数量,取值为1到25的任意数值。默认值为6。UInt8
返回值
返回一个包含两个哈希值(最小值和最大值)的元组。Tuple
示例
用法示例
ngramSimHash
在 v21.1 中引入
将一个 ASCII 字符串拆分为由 ngramsize 个字符组成的 n-gram,并返回其 n-gram 的 simhash 值。
可与 bitHammingDistance 一起用于检测近似重复字符串。两个字符串计算得到的 simhash 之间的 汉明距离 越小,这两个字符串越有可能相同。
语法
参数
返回值
返回输入字符串的计算哈希值。UInt64
示例
用法示例
ngramSimHashCaseInsensitive
引入于:v21.1
将一个 ASCII 字符串按 ngramsize 个符号拆分为 n-gram,并返回这些 n-gram 的 simhash。
不区分大小写。
可与 bitHammingDistance 一起用于检测近似重复的字符串。
两个字符串计算得到的 simhash 之间的 汉明距离 越小,这两个字符串相同的可能性就越大。
语法
参数
返回值
示例
用法示例
ngramSimHashCaseInsensitiveUTF8
引入于:v21.1
将一个 UTF-8 字符串拆分为由 ngramsize 个符号组成的 n-gram,并返回这些 n-gram 的 simhash 值。
此函数不区分大小写。
可与 bitHammingDistance 一起用于检测近似重复字符串。两个字符串计算得到的 simhashes 之间的 Hamming Distance 越小,这两个字符串相同的可能性就越大。
语法
参数
返回值
返回计算得到的哈希值。UInt64
示例
使用示例
ngramSimHashUTF8
引入于:v21.1
将一个 UTF-8 编码的字符串按 ngramsize 个字符拆分为 n-gram,并返回对应的 n-gram simhash 值。
该函数区分大小写。
可与 bitHammingDistance 搭配使用,以检测近似重复的字符串。
两个字符串计算得到的 simhashes 的汉明距离越小,这两个字符串相同的可能性就越大。
语法
参数
返回值
返回计算得到的哈希值。UInt64
示例
使用示例
sipHash128
引入版本:v1.1
与 sipHash64 类似,但会生成 128 位哈希值,即最终的异或折叠状态保留到 128 位。
这个 128 位变体与参考实现不同,且更弱。
之所以存在该版本,是因为在编写它时,SipHash 还没有官方的 128 位扩展。
建议新项目使用 sipHash128Reference。
语法
参数
arg1[, arg2, ...]— 要计算哈希值的可变数量的输入参数。Any
返回值
返回一个 128 位的 SipHash 哈希值。FixedString(16)
示例
用法示例
sipHash128Keyed
引入于:v23.2
与 sipHash128 相同,但额外接受一个显式的密钥参数,而不是使用固定的密钥。
这个 128 位变体与参考实现不同,安全性也更弱。
该版本之所以存在,是因为在其编写时,SipHash 还没有官方的 128 位扩展。
新项目应当优先使用 sipHash128ReferenceKeyed。
语法
参数
(k0, k1)— 表示键的两个 UInt64 值构成的元组。Tuple(UInt64, UInt64)arg1[, arg2, ...]— 需要计算哈希的数量可变的输入参数。Any
返回值
类型为 FixedString(16) 的 128 位 SipHash 哈希值。FixedString(16)
示例
使用示例
sipHash128Reference
在 v23.2 中引入
与 sipHash128 类似,但实现的是 SipHash 原作者提出的 128 位算法。
语法
参数
arg1[, arg2, ...]— 个数不定的输入参数,用于计算哈希值。Any
返回值
返回对输入参数计算得到的 128 位 SipHash 哈希值。FixedString(16)
示例
用法示例
sipHash128ReferenceKeyed
自 v23.2 引入
与 sipHash128Reference 相同,但多接受一个显式的密钥参数,而不是使用固定密钥。
语法
参数
(k0, k1)— 由两个值组成、表示键的元组Tuple(UInt64, UInt64)arg1[, arg2, ...]— 需要计算哈希的一组可变数量的输入参数。Any
返回值
返回对输入参数计算得到的 128 位 SipHash 哈希值。FixedString(16)
示例
使用示例
sipHash64
引入版本:v1.1
生成一个 64 位的 SipHash 哈希值。
这是一个密码学哈希函数。其运行速度至少是 MD5 哈希函数的三倍。
该函数会将所有输入参数都按字符串解释,并为每个参数计算哈希值。 然后通过以下算法组合这些哈希值:
- 将第一个和第二个哈希值拼接成一个数组并对其进行哈希。
- 将前一步计算出的哈希值与第三个输入参数的哈希值以类似方式进行哈希。
- 对原始输入剩余的所有哈希值重复此计算。
对于参数类型不同但输入值相同的情况,计算得到的哈希值可能会相同。
这会影响例如不同大小的整数类型、具有相同数据的已命名和未命名 Tuple、以及具有相同数据的 Map 与对应的 Array(Tuple(key, value)) 类型。
语法
参数
arg1[, arg2, ...]— 不定数量的输入参数。Any
返回值
返回根据输入参数计算得到的哈希值。UInt64
示例
使用示例
sipHash64Keyed
自 v23.2 起引入
与 sipHash64 类似,但多了一个显式密钥参数,而不是使用固定密钥。
语法
参数
(k0, k1)— 表示键的、由两个值组成的元组。Tuple(UInt64, UInt64)arg1[,arg2, ...]— 可变数量的输入参数。Any
返回值
返回对输入值计算得到的哈希值。UInt64
示例
使用示例
wordShingleMinHash
引入于:v21.1
将一个 ASCII 字符串按 shinglesize 个单词划分成若干片段(shingle),计算每个单词片段的哈希值,并返回包含这些哈希值的元组。
使用 hashnum 个最小哈希来计算最小哈希值,使用 hashnum 个最大哈希来计算最大哈希值。
该函数区分大小写。
可结合 tupleHammingDistance 用于检测部分重复的字符串。
对于两个字符串,如果返回的哈希值完全相同,则认为这两个字符串相同。
语法
参数
string— 要计算哈希的字符串。Stringshinglesize— 可选。词 shingle 的长度,取值范围为1到25的任意整数,默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希值数量,取值范围为1到25的任意整数,默认值为6。UInt8
返回值
返回一个包含两个哈希值(最小值和最大值)的元组。Tuple(UInt64, UInt64)
示例
使用示例
wordShingleMinHashArg
引入版本:v1.1
将一个 ASCII 字符串按每 shinglesize 个单词拆分为若干部分(shingle),并返回其中单词哈希值最小和最大的这些 shingle,这些哈希值是通过在相同输入上调用 wordShingleMinHash 函数计算得到的。
区分大小写。
语法
参数
string— 要计算哈希值的字符串。Stringshinglesize— 可选。单词 shingle 的大小,取值范围为1到25的任意数字,默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希值的数量,取值范围为1到25的任意数字,默认值为6。UInt8
返回值
返回一个包含两个元组的元组,每个元组包含 hashnum 个单词 shingle。Tuple(Tuple(String))
示例
使用示例
wordShingleMinHashArgCaseInsensitive
引入版本:v21.1
将一个 ASCII 字符串按每 shinglesize 个单词拆分为若干部分(shingles),并返回其中单词哈希值最小和最大的 shingles,这些哈希值是通过使用相同输入的 wordShingleMinHashCaseInsensitive 函数计算得到的。
该函数不区分大小写。
语法
参数
string— 要计算哈希的字符串。Stringshinglesize— 可选。词 shingle 的长度,取值范围为1到25。默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希的数量,取值范围为1到25。默认值为6。UInt8
返回值
返回一个包含两个元组的元组,每个元组中包含 hashnum 个词 shingle。Tuple(Tuple(String))
示例
用法示例
wordShingleMinHashArgCaseInsensitiveUTF8
引入版本:v21.1
将一个 UTF-8 字符串按每段包含 shinglesize 个单词拆分为多个部分(shingle),并返回按单词哈希值计算出的最小和最大的 shingle。这些哈希值由在相同输入下调用的 wordShingleMinHashCaseInsensitiveUTF8 函数计算。
该函数对大小写不敏感。
语法
参数
string— 要计算哈希的字符串。Stringshinglesize— 可选。词 shingle 的长度,取值范围为1到25。默认值为3。UInt8hashnum— 可选。用于计算结果的最小哈希和最小哈希数量,取值范围为1到25。默认值为6。UInt8
返回值
返回一个包含两个元组的元组,每个元组包含 hashnum 个词 shingle。Tuple(Tuple(String))
示例
使用示例
wordShingleMinHashArgUTF8
引入版本:v21.1
将一个 UTF-8 字符串按每 shinglesize 个单词拆分为若干部分(shingles),并返回其中具有最小和最大单词哈希值的 shingles,这些哈希值由使用相同输入的 wordShingleMinHashUTF8 函数计算得到。
区分大小写。
语法
参数
string— 要计算哈希值的字符串。Stringshinglesize— 可选。单词 shingle 的大小,取值为1到25之间的任意数值。默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希数量,取值为1到25之间的任意数值。默认值为6。UInt8
返回值
返回一个包含两个元组的元组,每个元组中有 hashnum 个单词 shingle。Tuple(Tuple(String))
示例
使用示例
wordShingleMinHashCaseInsensitive
引入于:v21.1
将一个 ASCII 字符串按 shinglesize 个单词切分成若干部分(shingle),为每个单词 shingle 计算哈希值,并返回包含这些哈希值的元组。
使用 hashnum 个最小哈希来计算最小哈希,使用 hashnum 个最大哈希来计算最大哈希。
该函数不区分大小写。
可与 tupleHammingDistance 一起用于检测部分重复(近似重复)字符串。
对于两个字符串,如果二者返回的哈希值完全相同,则这两个字符串相同。
语法
参数
string— 要计算哈希值的字符串。Stringshinglesize— 可选。单词 shingle 的大小,取值为1到25之间的任意整数。默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希值的数量,取值为1到25之间的任意整数。默认值为6。UInt8
返回值
返回一个包含两个哈希值(最小值和最大值)的元组。Tuple(UInt64, UInt64)
示例
用法示例
wordShingleMinHashCaseInsensitiveUTF8
引入版本:v21.1
将 UTF-8 字符串按 shinglesize 个单词拆分为若干单词片段(shingles),对每个单词 shingle 计算哈希值,并返回一个包含这些哈希值的元组。
使用 hashnum 个最小哈希来计算最小哈希值,使用 hashnum 个最大哈希来计算最大哈希值。
该函数大小写不敏感。
可与 tupleHammingDistance 搭配使用,用于检测近似重复的字符串。
对于两个字符串,如果它们返回的哈希完全一致,则认为这两个字符串相同。
语法
参数
string— 要计算哈希的字符串。Stringshinglesize— 可选。词 shingle 的大小,取值范围为1到25。默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希数量,取值范围为1到25。默认值为6。UInt8
返回值
返回一个包含两个哈希的元组——最小值和最大值。Tuple(UInt64, UInt64)
示例
用法示例
wordShingleMinHashUTF8
引入自:v21.1
将一个 UTF-8 字符串按 shinglesize 个单词拆分为若干片段(shingle),为每个单词 shingle 计算哈希值,并返回包含这些哈希值的元组。
使用 hashnum 个最小哈希值来计算最小哈希,并使用 hashnum 个最大哈希值来计算最大哈希。
区分大小写。
可与 tupleHammingDistance 一起用于检测近似重复的字符串。
对于两个字符串,如果二者返回的哈希值完全相同,则这两个字符串相同。
语法
参数
string— 需要计算哈希值的字符串。Stringshinglesize— 可选。词 shingle 的长度,取值范围为1到25,默认值为3。UInt8hashnum— 可选。用于计算结果的最小和最大哈希值的数量,取值范围为1到25,默认值为6。UInt8
返回值
返回一个包含两个哈希值(最小值和最大值)的元组。Tuple(UInt64, UInt64)
示例
使用示例
wordShingleSimHash
自 v21.1 起引入
将 ASCII 字符串按每 shinglesize 个单词切分为若干片段(shingle),并返回这些单词 shingle 的 simhash 值。
区分大小写。
可与 bitHammingDistance 一起用于检测近似重复字符串。
两个字符串计算得到的 simhash 值之间的 Hamming 距离 越小,这两个字符串越有可能相同。
语法
参数
返回值
返回计算得到的哈希值。UInt64
示例
用法示例
wordShingleSimHashCaseInsensitive
引入版本:v21.1
将一个 ASCII 字符串按 shinglesize 个单词拆分成若干部分(shingle),并返回这些单词 shingle 的 simhash。
该函数不区分大小写。
可与 bitHammingDistance 一起用于检测近似重复字符串。
两个字符串计算得到的 simhashes 之间的汉明距离越小,这两个字符串越有可能相同。
语法
参数
返回值
返回计算得到的哈希值。UInt64
示例
用法示例
wordShingleSimHashCaseInsensitiveUTF8
引入版本:v1.1
将 UTF-8 编码的字符串按 shinglesize 个单词拆分成多个部分(shingles),并返回这些单词 shingle 的 simhash。
该函数不区分大小写。
可与 bitHammingDistance 一起用于检测部分重复的字符串。
两个字符串计算得到的 simhashes 之间的汉明距离越小,这两个字符串越有可能相同。
语法
参数
返回值
返回计算得到的哈希值。UInt64
示例
用法示例
wordShingleSimHashUTF8
引入于:v21.1
将一个 UTF-8 字符串按 shinglesize 个单词划分为若干部分(shingle),并返回这些词片段的 simhash。
区分大小写。
可与 bitHammingDistance 结合使用,用于检测近似重复字符串。
两个字符串计算得到的 simhash 值之间的汉明距离越小,这两个字符串越有可能相同。
语法
参数
返回值
返回计算得到的哈希值。UInt64
示例
使用示例
wyHash64
自 v22.7 引入
计算 64 位 wyHash64 哈希值。
语法
参数
arg— 要计算哈希值的字符串参数。String
返回值
返回计算得到的 64 位哈希值 UInt64
示例
使用示例
xxHash32
引入版本:v20.1
计算字符串的 xxHash 哈希值。
64 位版本请参见 xxHash64
语法
参数
arg— 用于计算哈希值的输入字符串。String
返回值
返回输入字符串计算得到的 32 位哈希值。UInt32
示例
用法示例
xxHash64
自 v20.1 起提供
根据字符串计算一个 xxHash。
32 位版本请参阅 xxHash32
语法
参数
arg— 要进行哈希计算的输入字符串。String
返回值
返回对输入字符串计算得到的 64 位哈希值。UInt64
示例
使用示例
xxh3
自 v22.12 引入
计算一个 XXH3 64 位哈希值。
语法
参数
expr— 任意数据类型的表达式列表。Any
返回值
返回计算得到的 64 位 xxh3 哈希值 UInt64
示例
使用示例