FNV_HASH 関数
すべての基本データ型について、64 ビット FNV-1a 非暗号化ハッシュ関数を計算します。
構文
FNV_HASH(value [, seed])
引数
- value
-
ハッシュされる入力値。Amazon Redshift は、値のバイナリ表現を使用して入力値をハッシュします。例えば、INTEGER 値は 4 バイトを使用してハッシュされ、BIGINT 値は 8 バイトを使用してハッシュされます。また、CHAR および VARCHAR 入力をハッシュしても、末尾のスペースは無視されません。
- seed
-
ハッシュ関数の 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)