从字符串计算 MD5 并将结果字节集作为 FixedString(16) 返回。
如果您不需要特别的 MD5,但需要一个合适的加密 128 位哈希,请改用 [sipHash128] 函数。
如果想要获得与 md5sum 实用程序输出相同的结果,请使用 lower(hex(MD5(s)))。
语法
select MD5(string)
参数
string
– 一个字符串返回值
类型:FixedString(16)
示例
select MD5('test the MD5 function')
结果:
┌─MD5('test the MD5 function')─┐ │ ो?N?iq@?5G?:a │ └──────────────────────────────┘
从字符串计算 SHA-1、SHA-224 或 SHA-256,并将结果字节集作为 FixedString(20)、FixedString(28) 或 FixedString(32) 返回。
该函数运行相当慢(SHA-1 每个处理器核心每秒处理约 500 万个短字符串,而 SHA-224 和 SHA-256 处理约 220 万个)。
我们建议仅在需要特定哈希函数而无法选择它的情况下使用此功能。
即使在这些情况下,我们也建议离线应用该函数并在将值插入表中时预先计算,而不是在 SELECTS 中应用它。
语法
SHA1(string)
参数
string
– 一个字符串。返回值
FixedString(20)
。类型:FixedString(20)
示例
SELECT base64Encode(toString(SHA1('SAH1 test')))
结果:
┌─base64Encode(toString(SHA1('SAH1 test')))─┐ │ x5bDmJsgE+YzTir1+BPt4S98AEc= │ └───────────────────────────────────────────┘
从字符串计算 SHA-1、SHA-224 或 SHA-256,并将结果字节集作为 FixedString(20)、FixedString(28) 或 FixedString(32) 返回。
该函数运行相当慢(SHA-1 每个处理器核心每秒处理约 500 万个短字符串,而 SHA-224 和 SHA-256 处理约 220 万个)。
我们建议仅在需要特定哈希函数而无法选择它的情况下使用此功能。
即使在这些情况下,我们也建议离线应用该函数并在将值插入表中时预先计算,而不是在 SELECTS 中应用它。
语法
SHA224(string)
参数
string
– 一个字符串。返回值
FixedString(28)
。类型:FixedString(28)
示例
SELECT base64Encode(toString(SHA224('SAH224 test')))
结果:
┌─base64Encode(toString(SHA224('SAH224 test')))─┐ │ eptUvYjJG4AeQfQI9kZ/qViECg0gRbuwPJ5UlA== │ └───────────────────────────────────────────────┘
从字符串计算 SHA-1、SHA-224 或 SHA-256,并将结果字节集作为 FixedString(20)、FixedString(28) 或 FixedString(32) 返回。
该函数运行相当慢(SHA-1 每个处理器核心每秒处理约 500 万个短字符串,而 SHA-224 和 SHA-256 处理约 220 万个)。
我们建议仅在需要特定哈希函数而无法选择它的情况下使用此功能。
即使在这些情况下,我们也建议离线应用该函数并在将值插入表中时预先计算,而不是在 SELECTS 中应用它。
语法
SHA256(string)
参数
string
– 一个字符串。返回值
FixedString(32)
。类型:FixedString(32)
示例
SELECT base64Encode(toString(SHA256('SAH256 test')))
结果:
┌─base64Encode(toString(SHA256('SAH256 test')))─┐ │ I+OvFrLmD2Ofq1xBuFmKYCuB6iSg5/OrhcIbI5Qezs8= │ └───────────────────────────────────────────────┘
一种快速、质量上乘的非加密哈希函数,用于使用某种类型的规范化从 URL 获取字符串。URLHash(s)/
– 计算不包含尾随符号(?
或#
位于末尾,如果存在)的字符串的哈希值。URLHash(s, N)
– 计算从 URL 层次结构中 N 级字符串的哈希值,不包括尾随符号/
,?
或#
位于末尾(如果存在)。
级别与 URLHierarchy 中的级别相同。此功能特定于 Yandex.Metrica。
语法
URLHash(s,N)
参数
s
– URL 字符串。N
– UInt 中的级别数。返回值
类型:Uint64
示例
SELECT URLHash('https://www.bytedance.com/en/news',2)
结果:
┌─URLHash('https://www.bytedance.com/en/news', 2)─┐ │ 11898456355197509749 │ └─────────────────────────────────────────────────┘
生成 64 位CityHash哈希值。
这是一个快速非加密哈希函数。它对字符串参数使用 CityHash 算法,对其他数据类型的参数使用特定于实现的快速非加密哈希函数。该函数使用 CityHash 组合器来获取最终结果。
语法
cityHash64(par1,...)
参数
此函数接受可变数量的输入参数。参数可以是任何受支持的数据类型。
返回值
数据UInt64
类型哈希值。
类型:UInt64
示例
调用示例:
SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type;
结果:
┌─CityHash─────────────┬─type───┐ │ 16754903278969853710 │ UInt64 │ └──────────────────────┴────────┘
以下示例显示如何计算整个表的校验和,精度达到行顺序:
SELECT groupBitXor(cityHash64(*)) FROM table
生成一个 64 位 [FarmHash] 或指纹值。farmFingerprint64
更适合于稳定且可移植的值。
语法
farmFingerprint64(par1, ...) farmHash64(par1, ...)
这些函数分别使用所有 [可用方法] 中的Fingerprint64
和方法。Hash64
参数
该函数接受可变数量的输入参数。参数可以是任何 [支持的数据类型]。
返回值
一种UInt64
数据类型哈希值。
類型:UInt64
示例
SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type;
结果:
┌─FarmHash─────────────┬─type───┐ │ 16660843471760112397 │ UInt64 │ └──────────────────────┴────────┘
使用与gcc相同的哈希种子计算 64 位MurmurHash2哈希值。它可在 CLang 和 GCC 版本之间移植。
语法
gccMurmurHash(par1, ...)
参数
par1, ...
— 数量可变的参数,可以是任何 [支持的数据类型]。返回值
类型:UInt64
。
示例
询问:
SELECT gccMurmurHash(1, 2, 3) AS res1,gccMurmurHash(('a', [1, 2, 3], 4, (4, ['foo', 'bar'], 1, (1, 2)))) AS res2;
结果:
┌─res1─────────────────┬─res2────────────────┐ │ 12384823029245979431 │ 1188926775431157506 │ └──────────────────────┴─────────────────────┘
[解释] 所有输入参数为字符串,并计算每个参数的MD5哈希值。然后组合哈希值,取结果字符串哈希值的前 8 个字节,并按UInt64
大端字节顺序解释它们。
语法
halfMD5(par1, ...)
该函数相对较慢(每个处理器核心每秒 500 万个短字符串)。
考虑使用 [sipHash64] 函数。
参数
该函数接受可变数量的输入参数。参数可以是任何 [支持的数据类型]。
返回值
[UInt64] 数据类型哈希值。
类型:Uini64
示例
SELECT halfMD5(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS halfMD5hash, toTypeName(halfMD5hash) AS type;
┌─halfMD5hash────────┬─type───┐ │ 236874400738930661 │ UInt64 │ └────────────────────┴────────┘
HiveHash
根据字符串计算。
语法
SELECT hiveHash('')
这只是将符号位清零的 [JavaHash]。此函数在Apache Hive 3.0 之前的版本中使用。此哈希函数既不快也不优质。使用它的唯一原因是当此算法已在另一个系统中使用并且您必须计算完全相同的结果时。
返回值
数据Int32
类型哈希值。
类型:hiveHash
。
示例
询问:
SELECT hiveHash('Hello, world!');
结果:
┌─hiveHash('Hello, world!')─┐ │ 267439093 │ └───────────────────────────┘
从任何类型的整数计算 32 位哈希码。
这是一个相对较快的非加密哈希函数,其数字质量一般。
语法
intHash32(integer)
参数
integer
– 整数。返回值
类型:UInt32
示例
SELECT intHash32(12072650598913549138);
结果:
┌─intHash32(12072650598913549138)─┐ │ 3406876673 │ └─────────────────────────────────┘
从任意类型的整数计算 64 位哈希码。它比 intHash32 运行得更快。
语法
intHash64(integer)
参数
integer
– 整数。返回值
类型:UInt64
示例
SELECT intHash64(12072650598913549138);
结果:
┌─intHash32(12072650598913549138)─┐ │ 3406876673 │ └─────────────────────────────────┘
根据字符串计算JavaHash。此哈希函数既不快也不优质。使用它的唯一原因是当此算法已在另一个系统中使用并且您必须计算完全相同的结果时。
语法
SELECT javaHash('')
参数
string
返回值
Int32
类型哈希值。示例
询问:
SELECT javaHash('Hello, world!');
结果:
┌─javaHash('Hello, world!')─┐ │ -1880044555 │ └───────────────────────────┘
从 UInt64 计算 JumpConsistentHash。
接受两个参数:一个UInt64
-type 键和 bucket 的数量。返回Int32
。
语法
JumpConsistentHash(key, buckets)
参数
key
–UInt64
类型键。buckets
– 多个存储桶。返回值
Int32
。类型:Int32
示例
SELECT jumpConsistentHash(18446744073709551615, 12);
结果:
┌─jumpConsistentHash(18446744073709551615, 12)─┐ │ 10 │ └──────────────────────────────────────────────┘
生成 64 位MetroHash哈希值。
语法
metroHash64(par1, ...)
参数
该函数接受可变数量的输入参数。参数可以是任何 [支持的数据类型]。
返回值
[UInt64] 数据类型哈希值。
类型:UInt64
示例
SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type;
┌─MetroHash────────────┬─type───┐ │ 15061233052885528061 │ UInt64 │ └──────────────────────┴────────┘
产生MurmurHash2哈希值。
语法
murmurHash2_32(par1, ...)
参数
这两个函数都接受可变数量的输入参数。参数可以是任何 [支持的数据类型]。
返回值
murmurHash2_32
函数返回具有 [UInt32] 数据类型的哈希值。类型:Uint32
示例
SELECT murmurHash2_32('test');
结果:
┌─murmurHash2_32('test')─┐ │ 403862830 │ └────────────────────────┘
产生MurmurHash2哈希值。
语法
murmurHash2_64(par1, ...)
参数
这两个函数都接受可变数量的输入参数。参数可以是任何受支持的数据类型。
返回值
murmurHash2_64
数据类型的哈希值。类型:Uint64
示例
SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type;
┌─MurmurHash2────────┬─type───┐ │ 178997598777428518 │ UInt64 │ └────────────────────┴────────┘
产生 128 位MurmurHash3哈希值。
语法
murmurHash3_128( expr )
参数
expr
—返回字符串类型值的表达式。返回值
类型:FixedString(16)
示例
SELECT hex(murmurHash3_128('example_string')) AS MurmurHash3, toTypeName(MurmurHash3) AS type;
结果:
┌─MurmurHash3──────────────────────┬─type───┐ │ 368A1A311CB7342253354B548E7E7E71 │ String │ └──────────────────────────────────┴────────┘
产生MurmurHash3哈希值。
语法
murmurHash3_32(par1, ...)
参数
这两个函数都接受可变数量的输入参数。参数可以是任何受支持的数据类型。
返回值
murmurHash3_32
函数返回一个UInt32数据类型的哈希值。类型:Uint32
示例
SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type;
结果:
┌─MurmurHash3─┬─type───┐ │ 3163913960 │ UInt32 │ └─────────────┴────────┘
产生MurmurHash3哈希值。
语法
murmurHash3_64(par1, ...)
参数
这两个函数都接受可变数量的输入参数。参数可以是任何受支持的数据类型。
返回值
murmurHash3_64
函数返回一个UInt64数据类型的哈希值。类型:Uint64
示例
SELECT murmurHash3_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type;
结果:
┌─MurmurHash3──────────┬─type───┐ │ 12839777463072566684 │ UInt64 │ └──────────────────────┴────────┘
从字符串计算 SipHash。
接受字符串类型的参数。返回 FixedString(16)。
与sipHash64的不同之处在于最终的异或折叠状态仅达到128位。
语法
sipHash128(par1,...)
参数
此函数接受可变数量的输入参数。参数可以是任何受支持的数据类型。
返回值
UInt64数据类型哈希值。
类型:Uint64
示例
select sipHash128('test sipHash128');
结果:
┌─sipHash128('test sipHash128')─┐ │ av'??"????bk??: │ └───────────────────────────────┘
产生一个64位SipHash哈希值。
这是一个加密哈希函数。其运行速度至少比MD5函数快三倍。
函数将所有输入参数解释为字符串,并计算每个参数的哈希值。然后通过以下算法组合哈希值:
语法
sipHash64(par1,...)
参数
此函数接受可变数量的输入参数。参数可以是任何受支持的数据类型。
返回值
UInt64数据类型哈希值。
类型:Uint64
示例
SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type;
结果:
┌─SipHash─────────────┬─type───┐ │ 7934052906670448870 │ UInt64 │ └─────────────────────┴────────┘
xxHash
根据字符串计算。xxHash
是一种极快的非加密哈希算法,在 RAM 速度限制下工作。
语法
SELECT xxHash32(s)
参数
s
– 字符串。返回值
数据Uint32
类型哈希值。
类型:UInt32
示例
SELECT xxHash32('Hello, world!')
结果:
┌─xxHash32('Hello, world!')─┐ │ 834093149 │ └───────────────────────────┘
也可以看看
xxHash
根据字符串计算。xxHash
是一种极快的非加密哈希算法,在 RAM 速度限制下工作。
语法
SELECT xxHash64(s)
参数
s
– 字符串。返回值
数据Uint64
类型哈希值。
类型:UInt64
示例
SELECT xxHash64('Hello, world!')
结果:
┌─xxHash64('Hello, world!')─┐ │ 17691043854468224118 │ └───────────────────────────┘