MURMUR3_32_HASH - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

MURMUR3_32_HASH

MURMUR3_32_HASH 函数计算包括数值和字符串类型在内的所有常见数据类型的 32 位 Murmur3A 非加密哈希。

语法

MURMUR3_32_HASH(value [, seed])

参数

要进行哈希处理的输入值。Amazon Redshift 对输入值的二进制表示进行哈希处理。此行为类似于 FNV_HASH 函数,但值会转换为由 Apache Iceberg 32 位 Murmur3 哈希规范指定的二进制表示形式。

种子

哈希函数的 INT 种子。此参数是可选的。如果未给定,Amazon Redshift 使用默认种子 0。这样可以组合多个列的哈希,而无需任何转换或联接。

返回类型

此函数返回 INT。

示例

以下示例分别返回数字、字符串“Amazon Redshift”以及两者的联接的 Murmur3 哈希值。

select MURMUR3_32_HASH(1); MURMUR3_32_HASH ---------------------- -5968735742475085980 (1 row)
select MURMUR3_32_HASH('Amazon Redshift'); MURMUR3_32_HASH ---------------------- 7783490368944507294 (1 row)
select MURMUR3_32_HASH('Amazon Redshift', MURMUR3_32_HASH(1)); MURMUR3_32_HASH ---------------------- -2202602717770968555 (1 row)

使用说明

要计算具有多列的表的哈希,可以计算第一列的 Murmur3 哈希,并将其作为种子传递给第二列的哈希。然后,它将第二列的 Murmur3 哈希作为种子传递给第三列的哈希。

以下示例创建种子来对包含多列的表进行哈希处理。

select MURMUR3_32_HASH(column_3, MURMUR3_32_HASH(column_2, MURMUR3_32_HASH(column_1))) from sample_table;

同一个属性可用于计算字符串联接的哈希。

select MURMUR3_32_HASH('abcd'); MURMUR3_32_HASH --------------------- -281581062704388899 (1 row)
select MURMUR3_32_HASH('cd', MURMUR3_32_HASH('ab')); MURMUR3_32_HASH --------------------- -281581062704388899 (1 row)

哈希函数使用输入的类型来确定要进行哈希处理的字节数。如有必要,使用强制转换来强制特定类型。

以下示例使用不同的输入类型来生成不同的结果。

select MURMUR3_32_HASH(1::smallint); MURMUR3_32_HASH -------------------- 589727492704079044 (1 row)
select MURMUR3_32_HASH(1); MURMUR3_32_HASH ---------------------- -5968735742475085980 (1 row)
select MURMUR3_32_HASH(1::bigint); MURMUR3_32_HASH ---------------------- -8517097267634966620 (1 row)