FNV_HASH 函數 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

FNV_HASH 函數

計算所有基本資料類型的 64 位元 FNV-1a 非加密雜湊函數。

語法

FNV_HASH(value [, seed])

引數

要進行雜湊的輸入值。Amazon Redshift 使用值的二進位表示法來雜湊輸入值;例如,使用 4 個位元組雜湊INTEGER值,並使用 8 個位元組雜湊BIGINT值。此外,雜湊CHAR和VARCHAR輸入不會忽略尾端空格。

seed

雜湊函數的BIGINT種子為選用。如果未提供,Amazon Redshift 會使用預設FNV種子。這會允許組合多個欄位的雜湊,而無須進行轉換或串連。

傳回類型

BIGINT

範例

下列範例會傳回數字的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)