ClickHouse/docs/ja/sql_reference/functions/hash_functions.md
2020-04-04 12:15:31 +03:00

16 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true d734a8e46d 50 ハッシュ

ハッシュ関数

ハッシュ関数は、要素の決定論的な擬似ランダムシャッフルに使用できます。

ハーフmd5

解釈する すべての入力パラメーターを文字列として計算します MD5 それぞれのハッシュ値。 次に、ハッシュを結合し、結果の文字列のハッシュの最初の8バイトを取り、それらを次のように解釈します UInt64 ビッグエンディアンのバイト順。

halfMD5(par1, ...)

この関数は比較的遅いプロセッサコアあたり5万個の短い文字列。 を使用することを検討 サイファッシュ64 代わりに機能。

パラメータ

この関数は、可変個の入力パラメータを受け取ります。 パラメー 対応データ型.

戻り値

A UInt64 データ型ハッシュ値。

例えば

SELECT halfMD5(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS halfMD5hash, toTypeName(halfMD5hash) AS type
┌────────halfMD5hash─┬─type───┐
│ 186182704141653334 │ UInt64 │
└────────────────────┴────────┘

MD5

文字列からmd5を計算し、結果のバイトセットをfixedstring(16)として返します。 特にmd5を必要としないが、適切な暗号化128ビットハッシュが必要な場合は、 sipHash128 代わりに機能。 Md5sumユーティリティによる出力と同じ結果を得たい場合は、lower(hex(MD5(s)))を使用します。

サイファッシュ64

64ビットを生成する サイファッシュ ハッシュ値。

sipHash64(par1,...)

これは暗号化ハッシュ関数です。 それはより速い少なくとも三回働きます MD5 機能。

機能 解釈する すべての入力パラメータを文字列として計算し、それぞれのハッシュ値を計算します。 その融合ハッシュにより、次のアルゴリズム:

  1. すべての入力パラメータをハッシュした後、関数はハッシュの配列を取得します。
  2. 関数は、第一及び第二の要素を取り、それらの配列のためのハッシュを計算します。
  3. 次に、関数は、前のステップで計算されたハッシュ値と最初のハッシュ配列の第三の要素を取り、それらの配列のハッシュを計算します。
  4. 最初のハッシュ配列の残りのすべての要素について、前の手順が繰り返されます。

パラメータ

この関数は、可変個の入力パラメータを受け取ります。 パラメー 対応データ型.

戻り値

A UInt64 データ型ハッシュ値。

例えば

SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type
┌──────────────SipHash─┬─type───┐
│ 13726873534472839665 │ UInt64 │
└──────────────────────┴────────┘

サイファシー128

文字列からサイファッシュを計算します。 文字列型引数を受け取ります。 fixedstring(16)を返します。 Siphash64とは異なり、最終的なxor折りたたみ状態は128ビットまでしか行われません。

cityHash64

64ビットを生成する CityHash ハッシュ値。

cityHash64(par1,...)

これは高速な非暗号化ハッシュ関数です。 文字列パラメーターにはcityhashアルゴリズムを使用し、他のデータ型のパラメーターには実装固有の高速非暗号化ハッシュ関数を使用します。 この関数は、最終的な結果を得るためにcityhashコンビネータを使用します。

パラメータ

この関数は、可変個の入力パラメータを受け取ります。 パラメー 対応データ型.

戻り値

A UInt64 データ型ハッシュ値。

呼び出しの例:

SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type
┌─────────────CityHash─┬─type───┐
│ 12072650598913549138 │ UInt64 │
└──────────────────────┴────────┘

次の例は、行順序までの精度でテーブル全体のチェックサムを計算する方法を示しています:

SELECT groupBitXor(cityHash64(*)) FROM table

intHash32

任意のタイプの整数から32ビットのハッシュコードを計算します。 これは、数値の平均品質の比較的高速な非暗号化ハッシュ関数です。

intHash64

任意のタイプの整数から64ビットのハッシュコードを計算します。 それはinthash32より速く働きます。 平均品質。

SHA1

SHA224

SHA256

文字列からsha-1、sha-224、またはsha-256を計算し、結果のバイトセットをfixedstring(20)、fixedstring(28)、またはfixedstring(32)として返します。 この関数はかなりゆっくりと動作しますsha-1はプロセッサコアあたり約5百万個の短い文字列を処理し、sha-224とsha-256は約2.2百万プロセス)。 特定のハッシュ関数が必要で選択できない場合にのみ、この関数を使用することをお勧めします。 このような場合でも、テーブルに値を挿入するときは、selectsに値を適用するのではなく、関数をオフラインで適用して事前計算することをお勧めします。

URLHash(url[,N])

いくつかのタイプの正規化を使用してurlから取得した文字列の高速でまともな品質の非暗号化ハッシュ関数。 URLHash(s) Calculates a hash from a string without one of the trailing symbols /,? または # 最後に、存在する場合。 URLHash(s, N) Calculates a hash from a string up to the N level in the URL hierarchy, without one of the trailing symbols /,? または # 最後に、存在する場合。 レベルはurlhierarchyと同じです。 この機能はyandexに固有です。メトリカ

farmHash64

64ビットを生成する FarmHash ハッシュ値。

farmHash64(par1, ...)

この関数は、 Hash64 すべてからの方法 利用可能な方法.

パラメータ

この関数は、可変個の入力パラメータを受け取ります。 パラメー 対応データ型.

戻り値

A UInt64 データ型ハッシュ値。

例えば

SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type
┌─────────────FarmHash─┬─type───┐
│ 17790458267262532859 │ UInt64 │
└──────────────────────┴────────┘

javaHash

計算 JavaHash 文字列から。 このハッシュ関数は高速でも良い品質でもありません。 理由はただそれだけに使用する場合もこのアルゴリズムは実用化が始まっており他のシステムとしての計算は、全く同じ働きをします。

構文

SELECT javaHash('');

戻り値

A Int32 データ型ハッシュ値。

例えば

クエリ:

SELECT javaHash('Hello, world!');

結果:

┌─javaHash('Hello, world!')─┐
│               -1880044555 │
└───────────────────────────┘

javaHashUTF16LE

計算 JavaHash 文字列から、UTF-16LEエンコーディングで文字列を表すバイトが含まれていると仮定します。

構文

javaHashUTF16LE(stringUtf16le)

パラメータ

  • stringUtf16le — a string in UTF-16LE encoding.

戻り値

A Int32 データ型ハッシュ値。

例えば

UTF-16LEでエンコードされた文字列で正しいクエリー。

クエリ:

SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))

結果:

┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐
│                                                      3556498 │
└──────────────────────────────────────────────────────────────┘

hiveHash

計算 HiveHash 文字列から。

SELECT hiveHash('');

これはちょうど JavaHash サインビットをゼロにします。 この関数は、 Apacheハイブ 3.0より前のバージョンの場合。 このハッシュ関数は高速でも良い品質でもありません。 理由はただそれだけに使用する場合もこのアルゴリズムは実用化が始まっており他のシステムとしての計算は、全く同じ働きをします。

戻り値

A Int32 データ型ハッシュ値。

タイプ: hiveHash.

例えば

クエリ:

SELECT hiveHash('Hello, world!');

結果:

┌─hiveHash('Hello, world!')─┐
│                 267439093 │
└───────────────────────────┘

metroHash64

64ビットを生成する MetroHash ハッシュ値。

metroHash64(par1, ...)

パラメータ

この関数は、可変個の入力パラメータを受け取ります。 パラメー 対応データ型.

戻り値

A UInt64 データ型ハッシュ値。

例えば

SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type
┌────────────MetroHash─┬─type───┐
│ 14235658766382344533 │ UInt64 │
└──────────────────────┴────────┘

jumpConsistentHash

JumpConsistentHashフォームUInt64を計算します。 UInt64型のキーとバケットの数です。 Int32を返します。 詳細については、リンク: JumpConsistentHash

murmurHash2_32,murmurHash2_64

を生成する MurmurHash2 ハッシュ値。

murmurHash2_32(par1, ...)
murmurHash2_64(par1, ...)

パラメータ

どちらの関数も、入力パラメータの可変数を取ります。 パラメー 対応データ型.

戻り値

  • その murmurHash2_32 関数は、ハッシュ値を返します UInt32 データ型。
  • その murmurHash2_64 関数は、ハッシュ値を返します UInt64 データ型。

例えば

SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type
┌──────────MurmurHash2─┬─type───┐
│ 11832096901709403633 │ UInt64 │
└──────────────────────┴────────┘

murmurHash3_32,murmurHash3_64

を生成する MurmurHash3 ハッシュ値。

murmurHash3_32(par1, ...)
murmurHash3_64(par1, ...)

パラメータ

どちらの関数も、入力パラメータの可変数を取ります。 パラメー 対応データ型.

戻り値

  • その murmurHash3_32 関数は、 UInt32 データ型ハッシュ値。
  • その murmurHash3_64 関数は、 UInt64 データ型ハッシュ値。

例えば

SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type
┌─MurmurHash3─┬─type───┐
│     2152717 │ UInt32 │
└─────────────┴────────┘

murmurHash3_128

128ビットを生成する MurmurHash3 ハッシュ値。

murmurHash3_128( expr )

パラメータ

戻り値

A FixedString(16) データ型ハッシュ値。

例えば

SELECT murmurHash3_128('example_string') AS MurmurHash3, toTypeName(MurmurHash3) AS type
┌─MurmurHash3──────┬─type────────────┐
│ 6<>1<1C>4"S5KT<4B>~~q │ FixedString(16) │
└──────────────────┴─────────────────┘

xxHash32,xxHash64

計算 xxHash 文字列から。 これは、二つの味、32および64ビットで提案されています。

SELECT xxHash32('');

OR

SELECT xxHash64('');

戻り値

A Uint32 または Uint64 データ型ハッシュ値。

タイプ: xxHash.

例えば

クエリ:

SELECT xxHash32('Hello, world!');

結果:

┌─xxHash32('Hello, world!')─┐
│                 834093149 │
└───────────────────────────┘

また見なさい

元の記事