FNV_HASH 函数 - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

FNV_HASH 函数

计算所有基本数据类型的 64 位 FNV-1a 非加密哈希函数。

Syntax

FNV_HASH(value [, seed])

Arguments

要进行哈希处理的输入值。Amazon Redshift 使用值的二进制表示形式来对输入值进行哈希处理;例如,使用 4 个字节对 INTEGER 值进行哈希处理,使用 8 个字节对 BIGINT 值进行哈希处理。此外,对 CHAR 和 VARCHAR 输入进行哈希处理不会忽略尾随空格。

种子

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

返回类型

BIGINT。

Example

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

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

使用说明

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

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

    select fnv_hash(column_3, fnv_hash(column_2, fnv_hash(column_1))) from sample_table;
  • 同一个属性可用于计算字符串联接的哈希。

    select fnv_hash('abcd'); fnv_hash --------------------- -281581062704388899 (1 row)
    select fnv_hash('cd', fnv_hash('ab')); fnv_hash --------------------- -281581062704388899 (1 row)
  • 哈希函数使用输入的类型来确定要进行哈希处理的字节数。如有必要,使用强制转换来强制特定类型。

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

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