本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
針對所有基本資料類型運算 64 位元 FNV-1a 非密碼編譯雜湊函數。
語法
FNV_HASH(value [, seed])
引數
- 值
-
要進行雜湊的輸入值。Amazon Redshift 使用值的二進位表示法來雜湊輸入值;例如:INTEGER 值會使用 4 位元組雜湊,BIGINT 值則會使用 8 位元組雜湊。此外,CHAR 和 VARCHAR 輸入不會忽略結尾空格。
- seed
-
雜湊函數的 BIGINT 種子是選用的。如果沒有指定,Amazon Redshift 會使用預設 FNV 種子。這會允許組合多個欄位的雜湊,而無須進行轉換或串連。
傳回類型
BIGINT
範例
下列範例會分別傳回數字、字串 'Amazon Redshift' 及兩個值串連之後的 FNV 雜湊。
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 雜湊,然後將其做為種子傳遞給第二個欄位的雜湊。然後,其會將第二個欄位的雜湊做為種子傳遞至第三個欄位的雜湊。
以下範例會建立種子來雜湊包含多個欄位的資料表。
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)