MURMUR3_32_HASH - Amazon Redshift

MURMUR3_32_HASH

MURMUR3_32_HASH 関数は、数値型や文字列型を含むすべての一般的なデータ型の 32 ビット Murmur3A 非暗号化ハッシュを計算します。

構文

MURMUR3_32_HASH(value [, seed])

引数

value

ハッシュする入力値。Amazon Redshift は、入力値のバイナリ表現をハッシュします。この動作は FNV_HASH 関数 と似ていますが、値は Apache Iceberg の 32 ビット Murmur3 ハッシュ仕様で指定されているバイナリ表現に変換されます。

seed

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

戻り型

この関数は INT を返します。

次の例では、数値の Murmur3 ハッシュ、文字列「Amazon Redshift」、および両方の連結を返します。

select MURMUR3_32_HASH(1); MURMUR3_32_HASH ---------------------- -5968735742475085980 (1 row)
select MURMUR3_32_HASH('Amazon Redshift'); MURMUR3_32_HASH ---------------------- 7783490368944507294 (1 row)
select MURMUR3_32_HASH('Amazon Redshift', MURMUR3_32_HASH(1)); MURMUR3_32_HASH ---------------------- -2202602717770968555 (1 row)

使用に関する注意事項

複数の列を持つテーブルのハッシュを計算するには、最初の列の Murmur3 ハッシュを計算し、それをシードとして 2 番目の列のハッシュに渡します。次に、2 番目の列の Murmur3 ハッシュをシードとして 3 番目の列のハッシュに渡します。

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

select MURMUR3_32_HASH(column_3, MURMUR3_32_HASH(column_2, MURMUR3_32_HASH(column_1))) from sample_table;

同じプロパティを使用して、文字列の連結のハッシュを計算することができます。

select MURMUR3_32_HASH('abcd'); MURMUR3_32_HASH --------------------- -281581062704388899 (1 row)
select MURMUR3_32_HASH('cd', MURMUR3_32_HASH('ab')); MURMUR3_32_HASH --------------------- -281581062704388899 (1 row)

ハッシュ関数は、入力のタイプを使用して、ハッシュするバイト数を決定します。必要に応じて、キャストを使用して特定の型を適用します。

以下の例では、複数の異なる入力タイプを使用して複数の異なる結果を生成します。

select MURMUR3_32_HASH(1::smallint); MURMUR3_32_HASH -------------------- 589727492704079044 (1 row)
select MURMUR3_32_HASH(1); MURMUR3_32_HASH ---------------------- -5968735742475085980 (1 row)
select MURMUR3_32_HASH(1::bigint); MURMUR3_32_HASH ---------------------- -8517097267634966620 (1 row)