

 Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊，請參閱[部落格文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

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

# FNV\$1HASH 函數
<a name="r_FNV_HASH"></a>

針對所有基本資料類型運算 64 位元 FNV-1a 非密碼編譯雜湊函數。

## 語法
<a name="r_FNV_HASH-synopsis"></a>

```
FNV_HASH(value [, seed])
```

## 引數
<a name="r_FNV_HASH-argument-arguments"></a>

 *value*  
要進行雜湊的輸入值。Amazon Redshift 使用值的二進位表示法來雜湊輸入值；例如：INTEGER 值會使用 4 位元組雜湊，BIGINT 值則會使用 8 位元組雜湊。此外，CHAR 和 VARCHAR 輸入不會忽略結尾空格。

 *seed*  
雜湊函數的 BIGINT 種子是選用的。如果沒有指定，Amazon Redshift 會使用預設 FNV 種子。這會允許組合多個欄位的雜湊，而無須進行轉換或串連。

## 傳回類型
<a name="r_FNV_HASH-return-type"></a>

BIGINT

## 範例
<a name="r_FNV_HASH-example"></a>

下列範例會分別傳回數字、字串 '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)
```

## 使用須知
<a name="r_FNV_HASH-usage-notes"></a>
+ 如要運算包含多個欄位資料表的雜湊，您可以運算第一個欄位的 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)
  ```