ClickHouse/docs/ja/sql-reference/functions/hash-functions.md
2024-11-18 11:58:58 +09:00

73 KiB
Raw Blame History

slug sidebar_position sidebar_label
/ja/sql-reference/functions/hash-functions 85 Hash

ハッシュ関数

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

Simhashは、類似した引数に対して近いハッシュ値を返すハッシュ関数です。

halfMD5

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

halfMD5(par1, ...)

この関数は比較的遅いです1秒あたり500万の短い文字列をプロセッサコアごとに処理します。 代わりにsipHash64関数の使用を検討してください。

引数

この関数は可変数の入力パラメータを取ります。引数はサポートされているデータ型のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしのTuple、対応するデータを持つMapおよびArray(Tuple(key, value))型など)。

返される値

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 │
└────────────────────┴────────┘

MD4

文字列からMD4を計算し、結果のバイトセットをFixedString(16)として返します。

MD5

文字列からMD5を計算し、結果のバイトセットをFixedString(16)として返します。 特定のMD5が必要でない場合、暗号化的に確かな128ビットハッシュが必要な場合には、代わりにsipHash128関数を使用してください。 md5sumユーティリティと同じ結果を得たい場合は、lower(hex(MD5(s)))を使用してください。

RIPEMD160

RIPEMD-160ハッシュ値を生成します。

構文

RIPEMD160(input)

パラメータ

  • input: 入力文字列。String

返される値

結果を16進エンコードされた文字列として表すには、hex関数を使用します。

クエリ:

SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'));
┌─HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))─┐
│ 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B                      │
└───────────────────────────────────────────────────────────────┘

sipHash64

64ビットのSipHashハッシュ値を生成します。

sipHash64(par1,...)

これは暗号化ハッシュ関数です。少なくともMD5ハッシュ関数の3倍の速さで動作します。

この関数はすべての入力パラメータを文字列として解釈し、各パラメータごとにハッシュ値を計算します。次に、以下のアルゴリズムでハッシュを結合します。

  1. 最初と二番目のハッシュ値を連結し、結果をハッシュします。
  2. 前回計算されたハッシュ値と第三の入力パラメータのハッシュを同様にハッシュします。
  3. この計算を元の入力の残りのすべてのハッシュ値に対して繰り返します。

引数

この関数は任意のサポートされているデータ型の可変数の入力パラメータを取ります。

返される値

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

同じ入力値でも異なる引数型の場合、計算されるハッシュ値が等しい場合があることに注意してください。例えば、異なるサイズの整数、同じデータを持つ名前あり・なしのTuple、同じデータを持つMapと対応するArray(Tuple(key, value))型です。

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

sipHash64Keyed

sipHash64と同様ですが、固定キーを使う代わりに明示的なキー引数を追加で取ります。

構文

sipHash64Keyed((k0, k1), par1,...)

引数

sipHash64と同様ですが、最初の引数はキーを表す二つのUInt64値のタプルです。

返される値

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

クエリ:

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

sipHash128

sipHash64と同様ですが、128ビットのハッシュ値を生成します。最終的なxor折りたたみ状態は128ビットまで実行されます。

:::note この128ビットのバリアントはリファレンス実装とは異なり、弱いです。 これは、書かれた当時、SipHashの公式な128ビット拡張が存在しなかったためです。 新しいプロジェクトではおそらくsipHash128Referenceを使用すべきです。 :::

構文

sipHash128(par1,...)

引数

sipHash64と同様。

返される値

128ビットのSipHashハッシュ値。FixedString(16)型。

クエリ:

SELECT hex(sipHash128('foo', '\x01', 3));

結果:

┌─hex(sipHash128('foo', '', 3))────┐
│ 9DE516A64A414D4B1B609415E4523F24 │
└──────────────────────────────────┘

sipHash128Keyed

sipHash128と同様ですが、固定キーを使用する代わりに明示的なキー引数を追加で取ります。

:::note この128ビットのバリアントはリファレンス実装とは異なり、弱いです。 これは、書かれた当時、SipHashの公式な128ビット拡張が存在しなかったためです。 新しいプロジェクトではおそらくsipHash128ReferenceKeyedを使用すべきです。 :::

構文

sipHash128Keyed((k0, k1), par1,...)

引数

sipHash128と同様ですが、最初の引数はキーを表す二つのUInt64値のタプルです。

返される値

128ビットのSipHashハッシュ値。FixedString(16)型。

クエリ:

SELECT hex(sipHash128Keyed((506097522914230528, 1084818905618843912),'foo', '\x01', 3));

結果:

┌─hex(sipHash128Keyed((506097522914230528, 1084818905618843912), 'foo', '', 3))─┐
│ B8467F65C8B4CFD9A5F8BD733917D9BF                                              │
└───────────────────────────────────────────────────────────────────────────────┘

sipHash128Reference

sipHash128と同様ですが、SipHashのオリジナル作者による128ビットアルゴリズムを実装しています。

構文

sipHash128Reference(par1,...)

引数

sipHash128と同様。

返される値

128ビットのSipHashハッシュ値。FixedString(16)型。

クエリ:

SELECT hex(sipHash128Reference('foo', '\x01', 3));

結果:

┌─hex(sipHash128Reference('foo', '', 3))─┐
│ 4D1BE1A22D7F5933C0873E1698426260       │
└────────────────────────────────────────┘

sipHash128ReferenceKeyed

sipHash128Referenceと同様ですが、固定キーを使用する代わりに明示的なキー引数を追加で取ります。

構文

sipHash128ReferenceKeyed((k0, k1), par1,...)

引数

sipHash128Referenceと同様ですが、最初の引数はキーを表す二つのUInt64値のタプルです。

返される値

128ビットのSipHashハッシュ値。FixedString(16)型。

クエリ:

SELECT hex(sipHash128ReferenceKeyed((506097522914230528, 1084818905618843912),'foo', '\x01', 3));

結果:

┌─hex(sipHash128ReferenceKeyed((506097522914230528, 1084818905618843912), 'foo', '', 3))─┐
│ 630133C9722DC08646156B8130C4CDC8                                                       │
└────────────────────────────────────────────────────────────────────────────────────────┘

cityHash64

64ビットのCityHashハッシュ値を生成します。

cityHash64(par1,...)

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

GoogleがCityHashのアルゴリズムをClickHouseに追加された後に変更したことに注意してください。つまり、ClickHouseのcityHash64とGoogleの上流のCityHashは異なる結果を生成します。ClickHouseのcityHash64はCityHash v1.0.2に対応しています。

引数

この関数は可変数の入力パラメータを取ります。引数はサポートされているデータ型のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしのTuple、同じデータを持つMapおよび対応するArray(Tuple(key, value))型)。

返される値

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ビットのハッシュコードを計算します。 これは、数値用の平均的な品質の高速な非暗号化ハッシュ関数です。

構文

intHash32(int)

引数

  • int — ハッシュ化する整数。(U)Int*

返される値

  • 32ビットのハッシュコード。UInt32

クエリ:

SELECT intHash32(42);

結果:

┌─intHash32(42)─┐
│    1228623923 │
└───────────────┘

intHash64

任意の型の整数から64ビットのハッシュコードを計算します。 これは、数値用の平均的な品質の高速な非暗号化ハッシュ関数です。 intHash32よりも高速に動作します。

構文

intHash64(int)

引数

  • int — ハッシュ化する整数。(U)Int*

返される値

  • 64ビットのハッシュコード。UInt64

クエリ:

SELECT intHash64(42);

結果:

┌────────intHash64(42)─┐
│ 11490350930367293593 │
└──────────────────────┘

SHA1, SHA224, SHA256, SHA512, SHA512_256

文字列からSHA-1, SHA-224, SHA-256, SHA-512, SHA-512-256のハッシュを計算し、結果のバイトセットをFixedStringとして返します。

構文

SHA1('s')
...
SHA512('s')

この関数は比較的遅いですSHA-1は1秒あたり500万の短い文字列をプロセッサコアごとに処理し、SHA-224とSHA-256は約220万を処理します。 この関数を使用するのは、特定のハッシュ関数が必要であり、選択ができない場合のみをお勧めします。 このような場合でも、テーブルに挿入する際にオフラインで関数を適用し、値を事前に計算することをお勧めします。

引数

  • s — SHAハッシュ計算のための入力文字列。String

返される値

  • SHAハッシュを16進数非エンコードされたFixedStringとして返します。SHA-1はFixedString(20)として、SHA-224はFixedString(28)、SHA-256はFixedString(32)、SHA-512はFixedString(64)です。FixedString

結果を16進エンコードされた文字列として表すには、hex関数を使用します。

クエリ:

SELECT hex(SHA1('abc'));

結果:

┌─hex(SHA1('abc'))─────────────────────────┐
│ A9993E364706816ABA3E25717850C26C9CD0D89D │
└──────────────────────────────────────────┘

BLAKE3

BLAKE3ハッシュ文字列を計算し、結果のバイトセットをFixedStringとして返します。

構文

BLAKE3('s')

この暗号化ハッシュ関数はBLAKE3 Rustライブラリと統合されています。この関数はかなり速く、SHA-2と比較して約2倍の性能を示し、SHA-256と同じ長さのハッシュを生成します。

引数

  • s - BLAKE3ハッシュ計算のための入力文字列。String

返される値

  • BLAKE3ハッシュを型FixedString(32)のバイト配列として返します。FixedString

結果を16進エンコードされた文字列として表すには、hex関数を使用します。

クエリ:

SELECT hex(BLAKE3('ABC'))

結果:

┌─hex(BLAKE3('ABC'))───────────────────────────────────────────────┐
 D1717274597CF0289694F75D96D444B992A096F1AFD8E7BBFA6EBB1D360FEDFC 
└──────────────────────────────────────────────────────────────────┘

URLHash(url[, N])

文字列をURLから取得し、ある種の正規化を行った後、高速で質の良い非暗号化ハッシュ関数を計算します。 URLHash(s) 終わりに/?#のいずれかの追加入力シンボルがある場合、それを除いた状態で文字列からハッシュを計算します。 URLHash(s, N) 終わりに/?#のいずれかの追加入力シンボルがある場合、それを除いた状態でURL階層のNレベルまでハッシュを計算します。 レベルはURLHierarchyと同じです。

farmFingerprint64

farmHash64

64ビットのFarmHashまたはFingerprint値を生成します。farmFingerprint64は、安定していてポータブルな値が好ましい場合にお勧めします。

farmFingerprint64(par1, ...)
farmHash64(par1, ...)

これらの関数は、使用可能なすべてのメソッドから、それぞれFingerprint64Hash64メソッドを使用します。

引数

この関数は可変数の入力パラメータを取ります。引数はサポートされているデータ型のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしのTuple、同じデータを持つMapおよび対応するArray(Tuple(key, value))型)。

返される値

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

JavaのStringからJavaHashを計算します, Byte, Short, Integer, Long. このハッシュ関数は速くもなく、高品質でもありません。このアルゴリズムが他のシステムで既に使用されていて、全く同じ結果を計算する必要がある場合にのみ使う理由があります。

Javaは符号付き整数のハッシュしか計算をサポートしていないことに注意してください。符号なし整数のハッシュを計算したい場合は、適切な符号付きClickHouse型にキャストする必要があります。

構文

SELECT javaHash('')

返される値

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

クエリ:

SELECT javaHash(toInt32(123));

結果:

┌─javaHash(toInt32(123))─┐
│               123      │
└────────────────────────┘

クエリ:

SELECT javaHash('Hello, world!');

結果:

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

javaHashUTF16LE

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

構文

javaHashUTF16LE(stringUtf16le)

引数

  • stringUtf16le — UTF-16LEエンコーディングされた文字列。

返される値

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 Hiveバージョン3.0以前で使用されます。このハッシュ関数は速くも高品質でもありません。このアルゴリズムが他のシステムですでに使用されていて、完全に同じ結果を計算する必要がある場合にのみ使用する理由があります。

返される値

  • hiveHashハッシュ値。Int32

クエリ:

SELECT hiveHash('Hello, world!');

結果:

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

metroHash64

64ビットのMetroHashハッシュ値を生成します。

metroHash64(par1, ...)

引数

この関数は可変数の入力パラメータを取ります。引数はサポートされているデータ型のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしのTuple、同じデータを持つMapおよび対応するArray(Tuple(key, value))型)。

返される値

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

UInt64からJumpConsistentHashを計算します。 2つの引数を受け取ります: UInt64型のキーとバケット数。返されるのはInt32です。 詳細は、リンクをご覧ください: JumpConsistentHash

kostikConsistentHash

Konstantin 'kostik' OblakovによるO(1)時間および空間の一貫性ハッシュアルゴリズム。以前はyandexConsistentHash

構文

kostikConsistentHash(input, n)

別名: yandexConsistentHash(後方互換性のために残されています)。

パラメータ

  • input: UInt64型のキー。UInt64
  • n: バケット数。UInt16

返される値

  • UInt16データ型のハッシュ値。

実装の細部

n <= 32768の場合にのみ効率的です。

クエリ:

SELECT kostikConsistentHash(16045690984833335023, 2);
┌─kostikConsistentHash(16045690984833335023, 2)─┐
│                                             1 │
└───────────────────────────────────────────────┘

murmurHash2_32, murmurHash2_64

MurmurHash2ハッシュ値を生成します。

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

引数

両方の関数は可変数の入力パラメータを取ります。引数はサポートされているデータ型のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしのTuple、同じデータを持つMapおよび対応するArray(Tuple(key, value))型)。

返される値

  • 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 │
└──────────────────────┴────────┘

gccMurmurHash

gccと同じハッシュシードを使用して64ビットのMurmurHash2ハッシュ値を計算します。ClangとGCCのビルド間で互換性があります。

構文

gccMurmurHash(par1, ...)

引数

返される値

  • 計算されたハッシュ値。UInt64

クエリ:

SELECT
    gccMurmurHash(1, 2, 3) AS res1,
    gccMurmurHash(('a', [1, 2, 3], 4, (4, ['foo', 'bar'], 1, (1, 2)))) AS res2

結果:

┌─────────────────res1─┬────────────────res2─┐
│ 12384823029245979431 │ 1188926775431157506 │
└──────────────────────┴─────────────────────┘

kafkaMurmurHash

Kafkaと同じハッシュシードを使用して32ビットのMurmurHash2ハッシュ値を計算し、Default Partitionerと互換性があるように最上位ビットを持ちません。

構文

MurmurHash(par1, ...)

引数

返される値

  • 計算されたハッシュ値。UInt32

クエリ:

SELECT
    kafkaMurmurHash('foobar') AS res1,
    kafkaMurmurHash(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS res2

結果:

┌───────res1─┬─────res2─┐
│ 1357151166 │ 85479775 │
└────────────┴──────────┘

murmurHash3_32, murmurHash3_64

MurmurHash3ハッシュ値を生成します。

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

引数

両方の関数は可変数の入力パラメータを取ります。引数はサポートされているデータ型のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしのTuple、同じデータを持つMapおよび対応するArray(Tuple(key, value))型)。

返される値

  • 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)

引数

返される値

128ビットのMurmurHash3ハッシュ値。FixedString(16)

クエリ:

SELECT hex(murmurHash3_128('foo', 'foo', 'foo'));

結果:

┌─hex(murmurHash3_128('foo', 'foo', 'foo'))─┐
│ F8F7AD9B6CD4CF117A71E277E2EC2931          │
└───────────────────────────────────────────┘

xxh3

64ビットのxxh3ハッシュ値を生成します。

構文

xxh3(expr)

引数

  • expr — 任意のデータ型ののリスト。

返される値

64ビットのxxh3ハッシュ値。UInt64

クエリ:

SELECT xxh3('Hello', 'world')

結果:

┌─xxh3('Hello', 'world')─┐
│    5607458076371731292 │
└────────────────────────┘

xxHash32, xxHash64

文字列からxxHashを計算します。32ビットと64ビットの2つのフレーバーがあります。

SELECT xxHash32('')

OR

SELECT xxHash64('')

返される値

:::note 戻り型はxxHash32の場合UInt32xxHash64の場合UInt64になります。 :::

クエリ:

SELECT xxHash32('Hello, world!');

結果:

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

関連項目

ngramSimHash

ASCII文字列をngramsizeシンボルのn-gramに分割し、n-gramのsimhashを返します。大文字小文字を区別します。

bitHammingDistanceを使用して、半重複文字列を検出するために使用できます。計算された2つの文字列のsimhashesハミング距離が小さいほど、それらの文字列は同じ可能性が高くなります。

構文

ngramSimHash(string[, ngramsize])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8

返される値

クエリ:

SELECT ngramSimHash('ClickHouse') AS Hash;

結果:

┌───────Hash─┐
│ 1627567969 │
└────────────┘

ngramSimHashCaseInsensitive

ASCII文字列をngramsizeシンボルのn-gramに分割し、n-gramのsimhashを返します。大文字小文字を区別しません。

bitHammingDistanceを使用して、半重複文字列を検出するために使用できます。計算された2つの文字列のsimhashesハミング距離が小さいほど、それらの文字列は同じ可能性が高くなります。

構文

ngramSimHashCaseInsensitive(string[, ngramsize])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8

返される値

クエリ:

SELECT ngramSimHashCaseInsensitive('ClickHouse') AS Hash;

結果:

┌──────Hash─┐
│ 562180645 │
└───────────┘

ngramSimHashUTF8

UTF-8文字列をngramsizeシンボルのn-gramに分割し、n-gramのsimhashを返します。大文字小文字を区別します。

bitHammingDistanceを使用して、半重複文字列を検出するために使用できます。計算された2つの文字列のsimhashesハミング距離が小さいほど、それらの文字列は同じ可能性が高くなります。

構文

ngramSimHashUTF8(string[, ngramsize])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8

返される値

クエリ:

SELECT ngramSimHashUTF8('ClickHouse') AS Hash;

結果:

┌───────Hash─┐
│ 1628157797 │
└────────────┘

ngramSimHashCaseInsensitiveUTF8

UTF-8文字列をngramsizeシンボルのn-gramに分割し、n-gramのsimhashを返します。大文字小文字を区別しません。

bitHammingDistanceを使用して、半重複文字列を検出するために使用できます。計算された2つの文字列のsimhashesハミング距離が小さいほど、それらの文字列は同じ可能性が高くなります。

構文

ngramSimHashCaseInsensitiveUTF8(string[, ngramsize])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8

返される値

クエリ:

SELECT ngramSimHashCaseInsensitiveUTF8('ClickHouse') AS Hash;

結果:

┌───────Hash─┐
│ 1636742693 │
└────────────┘

wordShingleSimHash

ASCII文字列をshinglesize単語の部分(シングル)に分割して、単語シングルのsimhashを返します。大文字小文字を区別します。

bitHammingDistanceを使用して、半重複文字列を検出するために使用できます。計算された2つの文字列のsimhashesハミング距離が小さいほど、それらの文字列は同じ可能性が高くなります。

構文

wordShingleSimHash(string[, shinglesize])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8

返される値

クエリ:

SELECT wordShingleSimHash('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;

結果:

┌───────Hash─┐
│ 2328277067 │
└────────────┘

wordShingleSimHashCaseInsensitive

ASCII文字列をshinglesize単語の部分(シングル)に分割して、単語シングルのsimhashを返します。大文字小文字を区別しません。

bitHammingDistanceを使用して、半重複文字列を検出するために使用できます。計算された2つの文字列のsimhashesハミング距離が小さいほど、それらの文字列は同じ可能性が高くなります。

構文

wordShingleSimHashCaseInsensitive(string[, shinglesize])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8

返される値

クエリ:

SELECT wordShingleSimHashCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;

結果:

┌───────Hash─┐
│ 2194812424 │
└────────────┘

wordShingleSimHashUTF8

UTF-8文字列をshinglesize単語の部分(シングル)に分割して、単語シングルのsimhashを返します。大文字小文字を区別します。

bitHammingDistanceを使用して、半重複文字列を検出するために使用できます。計算された2つの文字列のsimhashesハミング距離が小さいほど、それらの文字列は同じ可能性が高くなります。

構文

wordShingleSimHashUTF8(string[, shinglesize])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8

返される値

クエリ:

SELECT wordShingleSimHashUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;

結果:

┌───────Hash─┐
│ 2328277067 │
└────────────┘

wordShingleSimHashCaseInsensitiveUTF8

UTF-8文字列をshinglesize単語の部分(シングル)に分割して、単語シングルのsimhashを返します。大文字小文字を区別しません。

bitHammingDistanceを使用して、半重複文字列を検出するために使用できます。計算された2つの文字列のsimhashesハミング距離が小さいほど、それらの文字列は同じ可能性が高くなります。

構文

wordShingleSimHashCaseInsensitiveUTF8(string[, shinglesize])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8

返される値

クエリ:

SELECT wordShingleSimHashCaseInsensitiveUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;

結果:

┌───────Hash─┐
│ 2194812424 │
└────────────┘

wyHash64

64ビットのwyHash64ハッシュ値を生成します。

構文

wyHash64(string)

引数

  • string — 文字列。String

返される値

クエリ:

SELECT wyHash64('ClickHouse') AS Hash;

結果:

┌─────────────────Hash─┐
│ 12336419557878201794 │
└──────────────────────┘

ngramMinHash

ASCII文字列をngramsizeシンボルのn-gramに分割し、各n-gramのハッシュ値を計算します。hashnum個の最小ハッシュを使用して最小ハッシュを計算し、hashnum個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別します。

tupleHammingDistanceを使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。

構文

ngramMinHash(string[, ngramsize, hashnum])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

  • 2つのハッシュを持つタプル — 最小と最大。Tuple(UInt64, UInt64)。

クエリ:

SELECT ngramMinHash('ClickHouse') AS Tuple;

結果:

┌─Tuple──────────────────────────────────────┐
│ (18333312859352735453,9054248444481805918) │
└────────────────────────────────────────────┘

ngramMinHashCaseInsensitive

ASCII文字列をngramsizeシンボルのn-gramに分割し、各n-gramのハッシュ値を計算します。hashnum個の最小ハッシュを使用して最小ハッシュを計算し、hashnum個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別しません。

tupleHammingDistanceを使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。

構文

ngramMinHashCaseInsensitive(string[, ngramsize, hashnum])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

  • 2つのハッシュを持つタプル — 最小と最大。Tuple(UInt64, UInt64)。

クエリ:

SELECT ngramMinHashCaseInsensitive('ClickHouse') AS Tuple;

結果:

┌─Tuple──────────────────────────────────────┐
│ (2106263556442004574,13203602793651726206) │
└────────────────────────────────────────────┘

ngramMinHashUTF8

UTF-8文字列をngramsizeシンボルのn-gramに分割し、各n-gramのハッシュ値を計算します。hashnum個の最小ハッシュを使用して最小ハッシュを計算し、hashnum個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別します。

tupleHammingDistanceを使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。

構文

ngramMinHashUTF8(string[, ngramsize, hashnum])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

  • 2つのハッシュを持つタプル — 最小と最大。Tuple(UInt64, UInt64)。

クエリ:

SELECT ngramMinHashUTF8('ClickHouse') AS Tuple;

結果:

┌─Tuple──────────────────────────────────────┐
│ (18333312859352735453,6742163577938632877) │
└────────────────────────────────────────────┘

ngramMinHashCaseInsensitiveUTF8

UTF-8文字列をngramsizeシンボルのn-gramに分割し、各n-gramのハッシュ値を計算します。hashnum個の最小ハッシュを使用して最小ハッシュを計算し、hashnum個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別しません。

tupleHammingDistanceを使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。

構文

ngramMinHashCaseInsensitiveUTF8(string [, ngramsize, hashnum])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

  • 2つのハッシュを持つタプル — 最小と最大。Tuple(UInt64, UInt64)。

クエリ:

SELECT ngramMinHashCaseInsensitiveUTF8('ClickHouse') AS Tuple;

結果:

┌─Tuple───────────────────────────────────────┐
│ (12493625717655877135,13203602793651726206) │
└─────────────────────────────────────────────┘

ngramMinHashArg

ASCII文字列をngramsizeシンボルのn-gramに分割し、最小および最大ハッシュを計算するngramMinHash関数で同じ入力を用いて計算されたn-gramsを返します。大文字小文字を区別します。

構文

ngramMinHashArg(string[, ngramsize, hashnum])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

クエリ:

SELECT ngramMinHashArg('ClickHouse') AS Tuple;

結果:

┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ous','ick','lic','Hou','kHo','use'),('Hou','lic','ick','ous','ckH','Cli')) │
└───────────────────────────────────────────────────────────────────────────────┘

ngramMinHashArgCaseInsensitive

ASCII文字列をngramsizeシンボルのn-gramに分割し、最小および最大ハッシュを計算するngramMinHashCaseInsensitive関数で同じ入力を用いて計算されたn-gramsを返します。大文字小文字を区別しません。

構文

ngramMinHashArgCaseInsensitive(string[, ngramsize, hashnum])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

クエリ:

SELECT ngramMinHashArgCaseInsensitive('ClickHouse') AS Tuple;

結果:

┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ous','ick','lic','kHo','use','Cli'),('kHo','lic','ick','ous','ckH','Hou')) │
└───────────────────────────────────────────────────────────────────────────────┘

ngramMinHashArgUTF8

UTF-8文字列をngramsizeシンボルのn-gramに分割し、最小および最大ハッシュを計算するngramMinHashUTF8関数で同じ入力を用いて計算されたn-gramsを返します。大文字小文字を区別します。

構文

ngramMinHashArgUTF8(string[, ngramsize, hashnum])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

クエリ:

SELECT ngramMinHashArgUTF8('ClickHouse') AS Tuple;

結果:

┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ous','ick','lic','Hou','kHo','use'),('kHo','Hou','lic','ick','ous','ckH')) │
└───────────────────────────────────────────────────────────────────────────────┘

ngramMinHashArgCaseInsensitiveUTF8

UTF-8文字列をngramsizeシンボルのn-gramに分割し、最小および最大ハッシュを計算するngramMinHashCaseInsensitiveUTF8関数で同じ入力を用いて計算されたn-gramsを返します。大文字小文字を区別しません。

構文

ngramMinHashArgCaseInsensitiveUTF8(string[, ngramsize, hashnum])

引数

  • string — 文字列。String
  • ngramsize — n-gramのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

クエリ:

SELECT ngramMinHashArgCaseInsensitiveUTF8('ClickHouse') AS Tuple;

結果:

┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ckH','ous','ick','lic','kHo','use'),('kHo','lic','ick','ous','ckH','Hou')) │
└───────────────────────────────────────────────────────────────────────────────┘

wordShingleMinHash

ASCII文字列をshinglesize単語の部分(シングル)に分割して、各単語シングルのハッシュ値を計算します。hashnum個の最小ハッシュを使用して最小ハッシュを計算し、hashnum個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別します。

tupleHammingDistanceを使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。

構文

wordShingleMinHash(string[, shinglesize, hashnum])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

  • 2つのハッシュを持つタプル — 最小と最大。Tuple(UInt64, UInt64)。

クエリ:

SELECT wordShingleMinHash('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;

結果:

┌─Tuple──────────────────────────────────────┐
│ (16452112859864147620,5844417301642981317) │
└────────────────────────────────────────────┘

wordShingleMinHashCaseInsensitive

ASCII文字列をshinglesize単語の部分(シングル)に分割して、各単語シングルのハッシュ値を計算します。hashnum個の最小ハッシュを使用して最小ハッシュを計算し、hashnum個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別しません。

tupleHammingDistanceを使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。

構文

wordShingleMinHashCaseInsensitive(string[, shinglesize, hashnum])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。オプション。可能な値は1から25までの任意の数。デフォルト値: 3UInt8
  • hashnum — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は1から25までの任意の数。デフォルト値: 6UInt8

返される値

  • 2つのハッシュを持つタプル — 最小と最大。Tuple(UInt64, UInt64)。

クエリ:

SELECT wordShingleMinHashCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;

結果:

┌─Tuple─────────────────────────────────────┐
│ (3065874883688416519,1634050779997673240) │
└───────────────────────────────────────────┘

wordShingleMinHashUTF8

UTF-8文字列をshinglesize単語の部分(シングル)に分割して、各単語シングルのハッシュ値を計算します。hashnum個の最小ハッシュを使用して最小ハッシュを計算し、hashnum個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別します。 はtupleHammingDistanceを使用して、半重複文字列の検出に使用できます。2つの文字列に対して、返されたハッシュの1つが両方の文字列で同じであれば、それらの文字列は同じであると考えます。

構文

wordShingleMinHashUTF8(string[, shinglesize, hashnum])

引数

  • string — 文字列。 String
  • shinglesize — 単語シングルのサイズ。省略可能。可能な値:1から25までの任意の数。デフォルト値:3UInt8
  • hashnum — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:1から25までの任意の数。デフォルト値:6UInt8

返される値

  • 2つのハッシュ最小および最大のタプル。 Tuple(UInt64, UInt64)。

クエリ:

SELECT wordShingleMinHashUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;

結果:

┌─Tuple──────────────────────────────────────┐
│ (16452112859864147620,5844417301642981317) │
└────────────────────────────────────────────┘

wordShingleMinHashCaseInsensitiveUTF8

UTF-8文字列をshinglesize単語の部分(シングル)に分割し、各単語シングルに対するハッシュ値を計算します。hashnumの最小ハッシュを使用して最小ハッシュを計算し、hashnumの最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別しません。

tupleHammingDistanceを使用して、半重複文字列の検出に使用できます。2つの文字列に対して、返されたハッシュの1つが両方の文字列で同じであれば、それらの文字列は同じであると考えます。

構文

wordShingleMinHashCaseInsensitiveUTF8(string[, shinglesize, hashnum])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。省略可能。可能な値:1から25までの任意の数。デフォルト値:3UInt8
  • hashnum — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:1から25までの任意の数。デフォルト値:6UInt8

返される値

  • 2つのハッシュ最小および最大のタプル。Tuple(UInt64, UInt64)。

クエリ:

SELECT wordShingleMinHashCaseInsensitiveUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;

結果:

┌─Tuple─────────────────────────────────────┐
│ (3065874883688416519,1634050779997673240) │
└───────────────────────────────────────────┘

wordShingleMinHashArg

ASCII文字列をshinglesize単語の部分(シングル)に分割し、同じ入力でwordshingleMinHash関数によって計算された最小および最大ワードハッシュを持つシングルを返します。大文字小文字を区別します。

構文

wordShingleMinHashArg(string[, shinglesize, hashnum])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。省略可能。可能な値:1から25までの任意の数。デフォルト値:3UInt8
  • hashnum — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:1から25までの任意の数。デフォルト値:6UInt8

返される値

クエリ:

SELECT wordShingleMinHashArg('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;

結果:

┌─Tuple─────────────────────────────────────────────────────────────────┐
│ (('OLAP','database','analytical'),('online','oriented','processing')) │
└───────────────────────────────────────────────────────────────────────┘

wordShingleMinHashArgCaseInsensitive

ASCII文字列をshinglesize単語の部分(シングル)に分割し、同じ入力でwordShingleMinHashCaseInsensitive関数によって計算された最小および最大ワードハッシュを持つシングルを返します。大文字小文字を区別しません。

構文

wordShingleMinHashArgCaseInsensitive(string[, shinglesize, hashnum])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。省略可能。可能な値:1から25までの任意の数。デフォルト値:3UInt8
  • hashnum — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:1から25までの任意の数。デフォルト値:6UInt8

返される値

クエリ:

SELECT wordShingleMinHashArgCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;

結果:

┌─Tuple──────────────────────────────────────────────────────────────────┐
│ (('queries','database','analytical'),('oriented','processing','DBMS')) │
└────────────────────────────────────────────────────────────────────────┘

wordShingleMinHashArgUTF8

UTF-8文字列をshinglesize単語の部分(シングル)に分割し、同じ入力でwordShingleMinHashUTF8関数によって計算された最小および最大ワードハッシュを持つシングルを返します。大文字小文字を区別します。

構文

wordShingleMinHashArgUTF8(string[, shinglesize, hashnum])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。省略可能。可能な値:1から25までの任意の数。デフォルト値:3UInt8
  • hashnum — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:1から25までの任意の数。デフォルト値:6UInt8

返される値

クエリ:

SELECT wordShingleMinHashArgUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;

結果:

┌─Tuple─────────────────────────────────────────────────────────────────┐
│ (('OLAP','database','analytical'),('online','oriented','processing')) │
└───────────────────────────────────────────────────────────────────────┘

wordShingleMinHashArgCaseInsensitiveUTF8

UTF-8文字列をshinglesize単語の部分(シングル)に分割し、同じ入力でwordShingleMinHashCaseInsensitiveUTF8関数によって計算された最小および最大ワードハッシュを持つシングルを返します。大文字小文字を区別しません。

構文

wordShingleMinHashArgCaseInsensitiveUTF8(string[, shinglesize, hashnum])

引数

  • string — 文字列。String
  • shinglesize — 単語シングルのサイズ。省略可能。可能な値:1から25までの任意の数。デフォルト値:3UInt8
  • hashnum — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:1から25までの任意の数。デフォルト値:6UInt8

返される値

クエリ:

SELECT wordShingleMinHashArgCaseInsensitiveUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;

結果:

┌─Tuple──────────────────────────────────────────────────────────────────┐
│ (('queries','database','analytical'),('oriented','processing','DBMS')) │
└────────────────────────────────────────────────────────────────────────┘

sqidEncode

番号をSqidとしてエンコードします。これはYouTubeのようなID文字列です。 出力アルファベットは abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 です。 ハッシュのためにこの関数を使用しないでください - 生成されたIDは元の番号にデコード可能です。

構文

sqidEncode(number1, ...)

エイリアス: sqid

引数

  • 可変個数のUInt8, UInt16, UInt32またはUInt64の番号。

返される値

sqid String

SELECT sqidEncode(1, 2, 3, 4, 5);
┌─sqidEncode(1, 2, 3, 4, 5)─┐
│ gXHfJ1C6dN                │
└───────────────────────────┘

sqidDecode

Sqidを元の番号にデコードします。入力文字列が有効なsqidでない場合は、空の配列を返します。

構文

sqidDecode(sqid)

引数

返される値

数値に変換されたsqid Array(UInt64)

SELECT sqidDecode('gXHfJ1C6dN');
┌─sqidDecode('gXHfJ1C6dN')─┐
│ [1,2,3,4,5]              │
└──────────────────────────┘