You need to enable JavaScript to run this app.
导航
哈希函数
最近更新时间:2024.12.06 14:06:04首次发布时间:2022.02.28 12:33:07

MD5

从字符串计算 MD5 并将结果字节集作为 FixedString(16) 返回。
如果您不需要特别的 MD5,但需要一个合适的加密 128 位哈希,请改用 [sipHash128] 函数。
如果想要获得与 md5sum 实用程序输出相同的结果,请使用 lower(hex(MD5(s)))。
语法

select MD5(string)

参数

  • string– 一个字符串

返回值

  • MD5 的值。

类型:FixedString(16)
示例

select MD5('test the MD5 function')

结果:

┌─MD5('test the MD5 function')─┐
│ ो?N?iq@?5G?:a               │
└──────────────────────────────┘

SHA1

从字符串计算 SHA-1、SHA-224 或 SHA-256,并将结果字节集作为 FixedString(20)、FixedString(28) 或 FixedString(32) 返回。
该函数运行相当慢(SHA-1 每个处理器核心每秒处理约 500 万个短字符串,而 SHA-224 和 SHA-256 处理约 220 万个)。
我们建议仅在需要特定哈希函数而无法选择它的情况下使用此功能。
即使在这些情况下,我们也建议离线应用该函数并在将值插入表中时预先计算,而不是在 SELECTS 中应用它。
语法

SHA1(string)

参数

  • string– 一个字符串。

返回值

  • 中的 SHA-1 加密字符串FixedString(20)

类型:FixedString(20)
示例

SELECT base64Encode(toString(SHA1('SAH1 test')))

结果:

┌─base64Encode(toString(SHA1('SAH1 test')))─┐
│ x5bDmJsgE+YzTir1+BPt4S98AEc=              │
└───────────────────────────────────────────┘

SHA224

从字符串计算 SHA-1、SHA-224 或 SHA-256,并将结果字节集作为 FixedString(20)、FixedString(28) 或 FixedString(32) 返回。
该函数运行相当慢(SHA-1 每个处理器核心每秒处理约 500 万个短字符串,而 SHA-224 和 SHA-256 处理约 220 万个)。
我们建议仅在需要特定哈希函数而无法选择它的情况下使用此功能。
即使在这些情况下,我们也建议离线应用该函数并在将值插入表中时预先计算,而不是在 SELECTS 中应用它。
语法

SHA224(string)

参数

  • string– 一个字符串。

返回值

  • 中的 SHA-224 加密字符串FixedString(28)

类型:FixedString(28)
示例

SELECT base64Encode(toString(SHA224('SAH224 test')))

结果:

┌─base64Encode(toString(SHA224('SAH224 test')))─┐
│ eptUvYjJG4AeQfQI9kZ/qViECg0gRbuwPJ5UlA==      │
└───────────────────────────────────────────────┘

SHA256

从字符串计算 SHA-1、SHA-224 或 SHA-256,并将结果字节集作为 FixedString(20)、FixedString(28) 或 FixedString(32) 返回。
该函数运行相当慢(SHA-1 每个处理器核心每秒处理约 500 万个短字符串,而 SHA-224 和 SHA-256 处理约 220 万个)。
我们建议仅在需要特定哈希函数而无法选择它的情况下使用此功能。
即使在这些情况下,我们也建议离线应用该函数并在将值插入表中时预先计算,而不是在 SELECTS 中应用它。
语法

SHA256(string)

参数

  • string– 一个字符串。

返回值

  • 中的 SHA-256 加密字符串FixedString(32)

类型:FixedString(32)
示例

SELECT base64Encode(toString(SHA256('SAH256 test')))

结果:

┌─base64Encode(toString(SHA256('SAH256 test')))─┐
│ I+OvFrLmD2Ofq1xBuFmKYCuB6iSg5/OrhcIbI5Qezs8=  │
└───────────────────────────────────────────────┘

URLHash

一种快速、质量上乘的非加密哈希函数,用于使用某种类型的规范化从 URL 获取字符串。
URLHash(s)/– 计算不包含尾随符号(?#位于末尾,如果存在)的字符串的哈希值。
URLHash(s, N)– 计算从 URL 层次结构中 N 级字符串的哈希值,不包括尾随符号/?#位于末尾(如果存在)。
级别与 URLHierarchy 中的级别相同。此功能特定于 Yandex.Metrica。
语法

URLHash(s,N)

参数

  • s– URL 字符串。
  • N– UInt 中的级别数。

返回值

  • UInt64 中的哈希值

类型:Uint64
示例

SELECT URLHash('https://www.bytedance.com/en/news',2)

结果:

┌─URLHash('https://www.bytedance.com/en/news', 2)─┐
│ 11898456355197509749                            │
└─────────────────────────────────────────────────┘

cityHash64

生成 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

farmHash64

生成一个 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 │
└──────────────────────┴────────┘

gccMurmurHash

使用与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 │
└──────────────────────┴─────────────────────┘

halfMD5

[解释] 所有输入参数为字符串,并计算每个参数的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

HiveHash根据字符串计算。
语法

SELECT hiveHash('')

这只是将符号位清零的 [JavaHash]。此函数在Apache Hive 3.0 之前的版本中使用。此哈希函数既不快也不优质。使用它的唯一原因是当此算法已在另一个系统中使用并且您必须计算完全相同的结果时。
返回值
数据Int32类型哈希值。
类型:hiveHash
示例
询问:

SELECT hiveHash('Hello, world!');

结果:

┌─hiveHash('Hello, world!')─┐
│ 267439093                 │
└───────────────────────────┘

intHash32

从任何类型的整数计算 32 位哈希码。
这是一个相对较快的非加密哈希函数,其数字质量一般。
语法

intHash32(integer)

参数

  • integer– 整数。

返回值

  • 32 位哈希码。

类型:UInt32
示例

SELECT intHash32(12072650598913549138);

结果:

┌─intHash32(12072650598913549138)─┐
│ 3406876673                      │
└─────────────────────────────────┘

intHash64

从任意类型的整数计算 64 位哈希码。它比 intHash32 运行得更快。
语法

intHash64(integer)

参数

  • integer– 整数。

返回值

  • 64 位哈希码。

类型:UInt64
示例

SELECT intHash64(12072650598913549138);

结果:

┌─intHash32(12072650598913549138)─┐
│ 3406876673                      │
└─────────────────────────────────┘

javaHash

根据字符串计算JavaHash。此哈希函数既不快也不优质。使用它的唯一原因是当此算法已在另一个系统中使用并且您必须计算完全相同的结果时。
语法

SELECT javaHash('')

参数

  • Astring

返回值

  • 数据Int32类型哈希值。

示例
询问:

SELECT javaHash('Hello, world!');

结果:

┌─javaHash('Hello, world!')─┐
│ -1880044555               │
└───────────────────────────┘

JumpConsistentHash

从 UInt64 计算 JumpConsistentHash。
接受两个参数:一个UInt64-type 键和 bucket 的数量。返回Int32
语法

JumpConsistentHash(key, buckets)

参数

  • keyUInt64类型键。
  • buckets– 多个存储桶。

返回值

  • 导致Int32

类型:Int32
示例

SELECT jumpConsistentHash(18446744073709551615, 12);

结果:

┌─jumpConsistentHash(18446744073709551615, 12)─┐
│ 10                                           │
└──────────────────────────────────────────────┘

metroHash64

生成 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_32

产生MurmurHash2哈希值。
语法

murmurHash2_32(par1, ...)

参数
这两个函数都接受可变数量的输入参数。参数可以是任何 [支持的数据类型]。
返回值

  • murmurHash2_32函数返回具有 [UInt32] 数据类型的哈希值。

类型:Uint32
示例

SELECT murmurHash2_32('test');

结果:

┌─murmurHash2_32('test')─┐
│ 403862830              │
└────────────────────────┘

murmurHash2_64

产生MurmurHash2哈希值。
语法

murmurHash2_64(par1, ...)

参数
这两个函数都接受可变数量的输入参数。参数可以是任何受支持的数据类型。
返回值

  • 该函数返回具有UInt64murmurHash2_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 │
└────────────────────┴────────┘

murmurHash3_128

产生 128 位MurmurHash3哈希值。
语法

murmurHash3_128( expr )

参数

  • expr—返回字符串类型值的表达式。

返回值

  • FixedString (16)数据类型哈希值。

类型:FixedString(16)
示例

SELECT hex(murmurHash3_128('example_string')) AS MurmurHash3, toTypeName(MurmurHash3) AS type;

结果:

┌─MurmurHash3──────────────────────┬─type───┐
│ 368A1A311CB7342253354B548E7E7E71 │ String │
└──────────────────────────────────┴────────┘

murmurHash3_32

产生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_64

产生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 │
└──────────────────────┴────────┘

sipHash128

从字符串计算 SipHash。
接受字符串类型的参数。返回 FixedString(16)。
与sipHash64的不同之处在于最终的异或折叠状态仅达到128位。
语法

sipHash128(par1,...)

参数
此函数接受可变数量的输入参数。参数可以是任何受支持的数据类型。
返回值
UInt64数据类型哈希值。
类型:Uint64
示例

select sipHash128('test sipHash128');

结果:

┌─sipHash128('test sipHash128')─┐
│ av'??"????bk??:              │
└───────────────────────────────┘

sipHash64

产生一个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 │
└─────────────────────┴────────┘

xxHash32

xxHash根据字符串计算。
xxHash是一种极快的非加密哈希算法,在 RAM 速度限制下工作。
语法

SELECT xxHash32(s)

参数

  • s– 字符串。

返回值
数据Uint32类型哈希值。
类型:UInt32
示例

SELECT xxHash32('Hello, world!')

结果:

┌─xxHash32('Hello, world!')─┐
│ 834093149                 │
└───────────────────────────┘

也可以看看

xxHash64

xxHash根据字符串计算。
xxHash是一种极快的非加密哈希算法,在 RAM 速度限制下工作。
语法

SELECT xxHash64(s)

参数

  • s– 字符串。

返回值
数据Uint64类型哈希值。
类型:UInt64
示例

SELECT xxHash64('Hello, world!')

结果:

┌─xxHash64('Hello, world!')─┐
│ 17691043854468224118      │
└───────────────────────────┘