FNV_HASH 関数 - Amazon Redshift

FNV_HASH 関数

すべての基本データ型について、64 ビット FNV-1a 非暗号化ハッシュ関数を計算します。

構文

FNV_HASH(value [, seed])

引数

ハッシュされる入力値。Amazon Redshift は、値のバイナリ表現を使用して入力値をハッシュします。例えば、INTEGER 値は 4 バイトを使用してハッシュされ、BIGINT 値は 8 バイトを使用してハッシュされます。また、CHAR および VARCHAR 入力をハッシュしても、末尾のスペースは無視されません。

シード

ハッシュ関数の BIGINT シードはオプションです。指定しない場合、Amazon Redshift はデフォルトの FNV シードを使用します。これにより、変換や連結を行わずに、複数の列のハッシュを組み合わせることができます。

戻り型

BIGINT

次の例では、数値の FNV ハッシュ、文字列「Amazon Redshift」、および 2 つの連結が返されます。

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 ハッシュを計算し、2 番目の列のハッシュにシードとして渡します。次に、2 番目の列の FNV ハッシュを、3 番目の列のハッシュにシードとして渡します。

    次の例では、複数の列を持つテーブルをハッシュするシードを作成します。

    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)