ClickHouse/docs/ja/sql-reference/functions/hash-functions.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

1949 lines
73 KiB
Markdown
Raw Normal View History

2024-11-18 02:58:58 +00:00
---
slug: /ja/sql-reference/functions/hash-functions
sidebar_position: 85
sidebar_label: Hash
---
# ハッシュ関数
ハッシュ関数は、要素の決定的な擬似ランダムシャッフルに使用できます。
Simhashは、類似した引数に対して近いハッシュ値を返すハッシュ関数です。
## halfMD5
すべての入力パラメータを文字列として[解釈](../functions/type-conversion-functions.md/#type_conversion_functions-reinterpretAsString)し、それぞれに対して[MD5](https://en.wikipedia.org/wiki/MD5)ハッシュ値を計算します。その後、ハッシュを結合し、結果の文字列のハッシュの最初の8バイトを取り出して、ビッグエンディアンバイトオーダーで`UInt64`として解釈します。
```sql
halfMD5(par1, ...)
```
この関数は比較的遅いです1秒あたり500万の短い文字列をプロセッサコアごとに処理します
代わりに[sipHash64](#siphash64)関数の使用を検討してください。
**引数**
この関数は可変数の入力パラメータを取ります。引数は[サポートされているデータ型](../data-types/index.md)のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしの`Tuple`、対応するデータを持つ`Map`および`Array(Tuple(key, value))`型など)。
**返される値**
[UInt64](../data-types/int-uint.md)データ型のハッシュ値。
**例**
```sql
SELECT halfMD5(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS halfMD5hash, toTypeName(halfMD5hash) AS type;
```
```response
┌────────halfMD5hash─┬─type───┐
│ 186182704141653334 │ UInt64 │
└────────────────────┴────────┘
```
## MD4
文字列からMD4を計算し、結果のバイトセットをFixedString(16)として返します。
## MD5
文字列からMD5を計算し、結果のバイトセットをFixedString(16)として返します。
特定のMD5が必要でない場合、暗号化的に確かな128ビットハッシュが必要な場合には、代わりにsipHash128関数を使用してください。
md5sumユーティリティと同じ結果を得たい場合は、lower(hex(MD5(s)))を使用してください。
## RIPEMD160
[RIPEMD-160](https://en.wikipedia.org/wiki/RIPEMD)ハッシュ値を生成します。
**構文**
```sql
RIPEMD160(input)
```
**パラメータ**
- `input`: 入力文字列。[String](../data-types/string.md)
**返される値**
- 160ビットの`RIPEMD-160` ハッシュ値、[FixedString(20)](../data-types/fixedstring.md)型。
**例**
結果を16進エンコードされた文字列として表すには、[hex](../functions/encoding-functions.md/#hex)関数を使用します。
クエリ:
```sql
SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'));
```
```response
┌─HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))─┐
│ 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B │
└───────────────────────────────────────────────────────────────┘
```
## sipHash64
64ビットの[SipHash](https://en.wikipedia.org/wiki/SipHash)ハッシュ値を生成します。
```sql
sipHash64(par1,...)
```
これは暗号化ハッシュ関数です。少なくとも[MD5](#md5)ハッシュ関数の3倍の速さで動作します。
この関数はすべての入力パラメータを文字列として[解釈](../functions/type-conversion-functions.md/#type_conversion_functions-reinterpretAsString)し、各パラメータごとにハッシュ値を計算します。次に、以下のアルゴリズムでハッシュを結合します。
1. 最初と二番目のハッシュ値を連結し、結果をハッシュします。
2. 前回計算されたハッシュ値と第三の入力パラメータのハッシュを同様にハッシュします。
3. この計算を元の入力の残りのすべてのハッシュ値に対して繰り返します。
**引数**
この関数は任意の[サポートされているデータ型](../data-types/index.md)の可変数の入力パラメータを取ります。
**返される値**
[UInt64](../data-types/int-uint.md)データ型のハッシュ値。
同じ入力値でも異なる引数型の場合、計算されるハッシュ値が等しい場合があることに注意してください。例えば、異なるサイズの整数、同じデータを持つ名前あり・なしの`Tuple`、同じデータを持つ`Map`と対応する`Array(Tuple(key, value))`型です。
**例**
```sql
SELECT sipHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type;
```
```response
┌──────────────SipHash─┬─type───┐
│ 11400366955626497465 │ UInt64 │
└──────────────────────┴────────┘
```
## sipHash64Keyed
[sipHash64](#siphash64)と同様ですが、固定キーを使う代わりに明示的なキー引数を追加で取ります。
**構文**
```sql
sipHash64Keyed((k0, k1), par1,...)
```
**引数**
[sipHash64](#siphash64)と同様ですが、最初の引数はキーを表す二つの`UInt64`値のタプルです。
**返される値**
[UInt64](../data-types/int-uint.md)データ型のハッシュ値。
**例**
クエリ:
```sql
SELECT sipHash64Keyed((506097522914230528, 1084818905618843912), array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS SipHash, toTypeName(SipHash) AS type;
```
```response
┌─────────────SipHash─┬─type───┐
│ 8017656310194184311 │ UInt64 │
└─────────────────────┴────────┘
```
## sipHash128
[sipHash64](#siphash64)と同様ですが、128ビットのハッシュ値を生成します。最終的なxor折りたたみ状態は128ビットまで実行されます。
:::note
この128ビットのバリアントはリファレンス実装とは異なり、弱いです。
これは、書かれた当時、SipHashの公式な128ビット拡張が存在しなかったためです。
新しいプロジェクトではおそらく[sipHash128Reference](#siphash128reference)を使用すべきです。
:::
**構文**
```sql
sipHash128(par1,...)
```
**引数**
[sipHash64](#siphash64)と同様。
**返される値**
128ビットの`SipHash`ハッシュ値。[FixedString(16)](../data-types/fixedstring.md)型。
**例**
クエリ:
```sql
SELECT hex(sipHash128('foo', '\x01', 3));
```
結果:
```response
┌─hex(sipHash128('foo', '', 3))────┐
│ 9DE516A64A414D4B1B609415E4523F24 │
└──────────────────────────────────┘
```
## sipHash128Keyed
[sipHash128](#siphash128)と同様ですが、固定キーを使用する代わりに明示的なキー引数を追加で取ります。
:::note
この128ビットのバリアントはリファレンス実装とは異なり、弱いです。
これは、書かれた当時、SipHashの公式な128ビット拡張が存在しなかったためです。
新しいプロジェクトではおそらく[sipHash128ReferenceKeyed](#siphash128referencekeyed)を使用すべきです。
:::
**構文**
```sql
sipHash128Keyed((k0, k1), par1,...)
```
**引数**
[sipHash128](#siphash128)と同様ですが、最初の引数はキーを表す二つの`UInt64`値のタプルです。
**返される値**
128ビットの`SipHash`ハッシュ値。[FixedString(16)](../data-types/fixedstring.md)型。
**例**
クエリ:
```sql
SELECT hex(sipHash128Keyed((506097522914230528, 1084818905618843912),'foo', '\x01', 3));
```
結果:
```response
┌─hex(sipHash128Keyed((506097522914230528, 1084818905618843912), 'foo', '', 3))─┐
│ B8467F65C8B4CFD9A5F8BD733917D9BF │
└───────────────────────────────────────────────────────────────────────────────┘
```
## sipHash128Reference
[sipHash128](#siphash128)と同様ですが、SipHashのオリジナル作者による128ビットアルゴリズムを実装しています。
**構文**
```sql
sipHash128Reference(par1,...)
```
**引数**
[sipHash128](#siphash128)と同様。
**返される値**
128ビットの`SipHash`ハッシュ値。[FixedString(16)](../data-types/fixedstring.md)型。
**例**
クエリ:
```sql
SELECT hex(sipHash128Reference('foo', '\x01', 3));
```
結果:
```response
┌─hex(sipHash128Reference('foo', '', 3))─┐
│ 4D1BE1A22D7F5933C0873E1698426260 │
└────────────────────────────────────────┘
```
## sipHash128ReferenceKeyed
[sipHash128Reference](#siphash128reference)と同様ですが、固定キーを使用する代わりに明示的なキー引数を追加で取ります。
**構文**
```sql
sipHash128ReferenceKeyed((k0, k1), par1,...)
```
**引数**
[sipHash128Reference](#siphash128reference)と同様ですが、最初の引数はキーを表す二つの`UInt64`値のタプルです。
**返される値**
128ビットの`SipHash`ハッシュ値。[FixedString(16)](../data-types/fixedstring.md)型。
**例**
クエリ:
```sql
SELECT hex(sipHash128ReferenceKeyed((506097522914230528, 1084818905618843912),'foo', '\x01', 3));
```
結果:
```response
┌─hex(sipHash128ReferenceKeyed((506097522914230528, 1084818905618843912), 'foo', '', 3))─┐
│ 630133C9722DC08646156B8130C4CDC8 │
└────────────────────────────────────────────────────────────────────────────────────────┘
```
## cityHash64
64ビットの[CityHash](https://github.com/google/cityhash)ハッシュ値を生成します。
```sql
cityHash64(par1,...)
```
これは高速な非暗号化ハッシュ関数です。文字列パラメータにはCityHashアルゴリズムを使用し、他のデータ型のパラメータには実装固有の高速非暗号化ハッシュ関数を使用します。この関数はCityHashのコンビネータを使用して最終結果を得ます。
GoogleがCityHashのアルゴリズムをClickHouseに追加された後に変更したことに注意してください。つまり、ClickHouseのcityHash64とGoogleの上流のCityHashは異なる結果を生成します。ClickHouseのcityHash64はCityHash v1.0.2に対応しています。
**引数**
この関数は可変数の入力パラメータを取ります。引数は[サポートされているデータ型](../data-types/index.md)のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしの`Tuple`、同じデータを持つ`Map`および対応する`Array(Tuple(key, value))`型)。
**返される値**
[UInt64](../data-types/int-uint.md)データ型のハッシュ値。
**例**
呼び出し例:
```sql
SELECT cityHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS CityHash, toTypeName(CityHash) AS type;
```
```response
┌─────────────CityHash─┬─type───┐
│ 12072650598913549138 │ UInt64 │
└──────────────────────┴────────┘
```
次の例は、行順序までの精度でテーブル全体のチェックサムを計算する方法を示しています:
```sql
SELECT groupBitXor(cityHash64(*)) FROM table
```
## intHash32
任意の型の整数から32ビットのハッシュコードを計算します。
これは、数値用の平均的な品質の高速な非暗号化ハッシュ関数です。
**構文**
```sql
intHash32(int)
```
**引数**
- `int` — ハッシュ化する整数。[(U)Int*](../data-types/int-uint.md)。
**返される値**
- 32ビットのハッシュコード。[UInt32](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT intHash32(42);
```
結果:
```response
┌─intHash32(42)─┐
│ 1228623923 │
└───────────────┘
```
## intHash64
任意の型の整数から64ビットのハッシュコードを計算します。
これは、数値用の平均的な品質の高速な非暗号化ハッシュ関数です。
[intHash32](#inthash32)よりも高速に動作します。
**構文**
```sql
intHash64(int)
```
**引数**
- `int` — ハッシュ化する整数。[(U)Int*](../data-types/int-uint.md)。
**返される値**
- 64ビットのハッシュコード。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT intHash64(42);
```
結果:
```response
┌────────intHash64(42)─┐
│ 11490350930367293593 │
└──────────────────────┘
```
## SHA1, SHA224, SHA256, SHA512, SHA512_256
文字列からSHA-1, SHA-224, SHA-256, SHA-512, SHA-512-256のハッシュを計算し、結果のバイトセットを[FixedString](../data-types/fixedstring.md)として返します。
**構文**
```sql
SHA1('s')
...
SHA512('s')
```
この関数は比較的遅いですSHA-1は1秒あたり500万の短い文字列をプロセッサコアごとに処理し、SHA-224とSHA-256は約220万を処理します
この関数を使用するのは、特定のハッシュ関数が必要であり、選択ができない場合のみをお勧めします。
このような場合でも、テーブルに挿入する際にオフラインで関数を適用し、値を事前に計算することをお勧めします。
**引数**
- `s` — SHAハッシュ計算のための入力文字列。[String](../data-types/string.md)。
**返される値**
- SHAハッシュを16進数非エンコードされたFixedStringとして返します。SHA-1はFixedString(20)として、SHA-224はFixedString(28)、SHA-256はFixedString(32)、SHA-512はFixedString(64)です。[FixedString](../data-types/fixedstring.md)。
**例**
結果を16進エンコードされた文字列として表すには、[hex](../functions/encoding-functions.md/#hex)関数を使用します。
クエリ:
```sql
SELECT hex(SHA1('abc'));
```
結果:
```response
┌─hex(SHA1('abc'))─────────────────────────┐
│ A9993E364706816ABA3E25717850C26C9CD0D89D │
└──────────────────────────────────────────┘
```
## BLAKE3
BLAKE3ハッシュ文字列を計算し、結果のバイトセットを[FixedString](../data-types/fixedstring.md)として返します。
**構文**
```sql
BLAKE3('s')
```
この暗号化ハッシュ関数はBLAKE3 Rustライブラリと統合されています。この関数はかなり速く、SHA-2と比較して約2倍の性能を示し、SHA-256と同じ長さのハッシュを生成します。
**引数**
- s - BLAKE3ハッシュ計算のための入力文字列。[String](../data-types/string.md)。
**返される値**
- BLAKE3ハッシュを型FixedString(32)のバイト配列として返します。[FixedString](../data-types/fixedstring.md)。
**例**
結果を16進エンコードされた文字列として表すには、[hex](../functions/encoding-functions.md/#hex)関数を使用します。
クエリ:
```sql
SELECT hex(BLAKE3('ABC'))
```
結果:
```sql
┌─hex(BLAKE3('ABC'))───────────────────────────────────────────────┐
│ D1717274597CF0289694F75D96D444B992A096F1AFD8E7BBFA6EBB1D360FEDFC │
└──────────────────────────────────────────────────────────────────┘
```
## URLHash(url\[, N\])
文字列をURLから取得し、ある種の正規化を行った後、高速で質の良い非暗号化ハッシュ関数を計算します。
`URLHash(s)` 終わりに`/`、`?`、`#`のいずれかの追加入力シンボルがある場合、それを除いた状態で文字列からハッシュを計算します。
`URLHash(s, N)` 終わりに`/`、`?`、`#`のいずれかの追加入力シンボルがある場合、それを除いた状態でURL階層のNレベルまでハッシュを計算します。
レベルはURLHierarchyと同じです。
## farmFingerprint64
## farmHash64
64ビットの[FarmHash](https://github.com/google/farmhash)またはFingerprint値を生成します。`farmFingerprint64`は、安定していてポータブルな値が好ましい場合にお勧めします。
```sql
farmFingerprint64(par1, ...)
farmHash64(par1, ...)
```
これらの関数は、[使用可能なすべてのメソッド](https://github.com/google/farmhash/blob/master/src/farmhash.h)から、それぞれ`Fingerprint64`と`Hash64`メソッドを使用します。
**引数**
この関数は可変数の入力パラメータを取ります。引数は[サポートされているデータ型](../data-types/index.md)のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしの`Tuple`、同じデータを持つ`Map`および対応する`Array(Tuple(key, value))`型)。
**返される値**
[UInt64](../data-types/int-uint.md)データ型のハッシュ値。
**例**
```sql
SELECT farmHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS FarmHash, toTypeName(FarmHash) AS type;
```
```response
┌─────────────FarmHash─┬─type───┐
│ 17790458267262532859 │ UInt64 │
└──────────────────────┴────────┘
```
## javaHash
Javaの[String](http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/String.java#l1452)からJavaHashを計算します,
[Byte](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Byte.java#l405),
[Short](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Short.java#l410),
[Integer](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Integer.java#l959),
[Long](https://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/478a4add975b/src/share/classes/java/lang/Long.java#l1060).
このハッシュ関数は速くもなく、高品質でもありません。このアルゴリズムが他のシステムで既に使用されていて、全く同じ結果を計算する必要がある場合にのみ使う理由があります。
Javaは符号付き整数のハッシュしか計算をサポートしていないことに注意してください。符号なし整数のハッシュを計算したい場合は、適切な符号付きClickHouse型にキャストする必要があります。
**構文**
```sql
SELECT javaHash('')
```
**返される値**
`Int32`データ型のハッシュ値。
**例**
クエリ:
```sql
SELECT javaHash(toInt32(123));
```
結果:
```response
┌─javaHash(toInt32(123))─┐
│ 123 │
└────────────────────────┘
```
クエリ:
```sql
SELECT javaHash('Hello, world!');
```
結果:
```response
┌─javaHash('Hello, world!')─┐
│ -1880044555 │
└───────────────────────────┘
```
## javaHashUTF16LE
文字列からJavaHashを計算し、それがUTF-16LEエンコーディングであるバイトを持つと仮定します。
**構文**
```sql
javaHashUTF16LE(stringUtf16le)
```
**引数**
- `stringUtf16le` — UTF-16LEエンコーディングされた文字列。
**返される値**
`Int32`データ型のハッシュ値。
**例**
UTF-16LEエンコードされた文字列を用いた正しいクエリ。
クエリ:
```sql
SELECT javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'));
```
結果:
```response
┌─javaHashUTF16LE(convertCharset('test', 'utf-8', 'utf-16le'))─┐
│ 3556498 │
└──────────────────────────────────────────────────────────────┘
```
## hiveHash
文字列から`HiveHash`を計算します。
```sql
SELECT hiveHash('')
```
これは、符号ビットをゼロ化したただの[JavaHash](#javahash)です。この関数は、[Apache Hive](https://en.wikipedia.org/wiki/Apache_Hive)バージョン3.0以前で使用されます。このハッシュ関数は速くも高品質でもありません。このアルゴリズムが他のシステムですでに使用されていて、完全に同じ結果を計算する必要がある場合にのみ使用する理由があります。
**返される値**
- `hiveHash`ハッシュ値。[Int32](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT hiveHash('Hello, world!');
```
結果:
```response
┌─hiveHash('Hello, world!')─┐
│ 267439093 │
└───────────────────────────┘
```
## metroHash64
64ビットの[MetroHash](http://www.jandrewrogers.com/2015/05/27/metrohash/)ハッシュ値を生成します。
```sql
metroHash64(par1, ...)
```
**引数**
この関数は可変数の入力パラメータを取ります。引数は[サポートされているデータ型](../data-types/index.md)のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしの`Tuple`、同じデータを持つ`Map`および対応する`Array(Tuple(key, value))`型)。
**返される値**
[UInt64](../data-types/int-uint.md)データ型のハッシュ値。
**例**
```sql
SELECT metroHash64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MetroHash, toTypeName(MetroHash) AS type;
```
```response
┌────────────MetroHash─┬─type───┐
│ 14235658766382344533 │ UInt64 │
└──────────────────────┴────────┘
```
## jumpConsistentHash
UInt64からJumpConsistentHashを計算します。
2つの引数を受け取ります: `UInt64`型のキーとバケット数。返されるのは`Int32`です。
詳細は、リンクをご覧ください: [JumpConsistentHash](https://arxiv.org/pdf/1406.2294.pdf)
## kostikConsistentHash
Konstantin 'kostik' OblakovによるO(1)時間および空間の一貫性ハッシュアルゴリズム。以前は`yandexConsistentHash`。
**構文**
```sql
kostikConsistentHash(input, n)
```
別名: `yandexConsistentHash`(後方互換性のために残されています)。
**パラメータ**
- `input`: `UInt64`型のキー。[UInt64](../data-types/int-uint.md)。
- `n`: バケット数。[UInt16](../data-types/int-uint.md)。
**返される値**
- [UInt16](../data-types/int-uint.md)データ型のハッシュ値。
**実装の細部**
n <= 32768の場合にのみ効率的です。
**例**
クエリ:
```sql
SELECT kostikConsistentHash(16045690984833335023, 2);
```
```response
┌─kostikConsistentHash(16045690984833335023, 2)─┐
│ 1 │
└───────────────────────────────────────────────┘
```
## murmurHash2_32, murmurHash2_64
[MurmurHash2](https://github.com/aappleby/smhasher)ハッシュ値を生成します。
```sql
murmurHash2_32(par1, ...)
murmurHash2_64(par1, ...)
```
**引数**
両方の関数は可変数の入力パラメータを取ります。引数は[サポートされているデータ型](../data-types/index.md)のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしの`Tuple`、同じデータを持つ`Map`および対応する`Array(Tuple(key, value))`型)。
**返される値**
- `murmurHash2_32`関数は[UInt32](../data-types/int-uint.md)データ型のハッシュ値を返します。
- `murmurHash2_64`関数は[UInt64](../data-types/int-uint.md)データ型のハッシュ値を返します。
**例**
```sql
SELECT murmurHash2_64(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash2, toTypeName(MurmurHash2) AS type;
```
```response
┌──────────MurmurHash2─┬─type───┐
│ 11832096901709403633 │ UInt64 │
└──────────────────────┴────────┘
```
## gccMurmurHash
[gcc](https://github.com/gcc-mirror/gcc/blob/41d6b10e96a1de98e90a7c0378437c3255814b16/libstdc%2B%2B-v3/include/bits/functional_hash.h#L191)と同じハッシュシードを使用して64ビットの[MurmurHash2](https://github.com/aappleby/smhasher)ハッシュ値を計算します。ClangとGCCのビルド間で互換性があります。
**構文**
```sql
gccMurmurHash(par1, ...)
```
**引数**
- `par1, ...` — [サポートされているデータ型](../data-types/index.md/#data_types)のいずれかである可変数のパラメータ。
**返される値**
- 計算されたハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT
gccMurmurHash(1, 2, 3) AS res1,
gccMurmurHash(('a', [1, 2, 3], 4, (4, ['foo', 'bar'], 1, (1, 2)))) AS res2
```
結果:
```response
┌─────────────────res1─┬────────────────res2─┐
│ 12384823029245979431 │ 1188926775431157506 │
└──────────────────────┴─────────────────────┘
```
## kafkaMurmurHash
[Kafka](https://github.com/apache/kafka/blob/461c5cfe056db0951d9b74f5adc45973670404d7/clients/src/main/java/org/apache/kafka/common/utils/Utils.java#L482)と同じハッシュシードを使用して32ビットの[MurmurHash2](https://github.com/aappleby/smhasher)ハッシュ値を計算し、[Default Partitioner](https://github.com/apache/kafka/blob/139f7709bd3f5926901a21e55043388728ccca78/clients/src/main/java/org/apache/kafka/clients/producer/internals/BuiltInPartitioner.java#L328)と互換性があるように最上位ビットを持ちません。
**構文**
```sql
MurmurHash(par1, ...)
```
**引数**
- `par1, ...` — [サポートされているデータ型](../data-types/index.md/#data_types)のいずれかである可変数のパラメータ。
**返される値**
- 計算されたハッシュ値。[UInt32](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT
kafkaMurmurHash('foobar') AS res1,
kafkaMurmurHash(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS res2
```
結果:
```response
┌───────res1─┬─────res2─┐
│ 1357151166 │ 85479775 │
└────────────┴──────────┘
```
## murmurHash3_32, murmurHash3_64
[MurmurHash3](https://github.com/aappleby/smhasher)ハッシュ値を生成します。
```sql
murmurHash3_32(par1, ...)
murmurHash3_64(par1, ...)
```
**引数**
両方の関数は可変数の入力パラメータを取ります。引数は[サポートされているデータ型](../data-types/index.md)のいずれかであり得ます。異なる型の引数でも、同じ値に対して計算されるハッシュ関数の値が同じになる場合があります(異なるサイズの整数、同じデータを持つ名前付きおよび名前なしの`Tuple`、同じデータを持つ`Map`および対応する`Array(Tuple(key, value))`型)。
**返される値**
- `murmurHash3_32`関数は[UInt32](../data-types/int-uint.md)データ型のハッシュ値を返します。
- `murmurHash3_64`関数は[UInt64](../data-types/int-uint.md)データ型のハッシュ値を返します。
**例**
```sql
SELECT murmurHash3_32(array('e','x','a'), 'mple', 10, toDateTime('2019-06-15 23:00:00')) AS MurmurHash3, toTypeName(MurmurHash3) AS type;
```
```response
┌─MurmurHash3─┬─type───┐
│ 2152717 │ UInt32 │
└─────────────┴────────┘
```
## murmurHash3_128
128ビットの[MurmurHash3](https://github.com/aappleby/smhasher)ハッシュ値を生成します。
**構文**
```sql
murmurHash3_128(expr)
```
**引数**
- `expr` — [](../syntax.md/#syntax-expressions)のリスト。[String](../data-types/string.md)。
**返される値**
128ビットの`MurmurHash3`ハッシュ値。[FixedString(16)](../data-types/fixedstring.md)。
**例**
クエリ:
```sql
SELECT hex(murmurHash3_128('foo', 'foo', 'foo'));
```
結果:
```response
┌─hex(murmurHash3_128('foo', 'foo', 'foo'))─┐
│ F8F7AD9B6CD4CF117A71E277E2EC2931 │
└───────────────────────────────────────────┘
```
## xxh3
64ビットの[xxh3](https://github.com/Cyan4973/xxHash)ハッシュ値を生成します。
**構文**
```sql
xxh3(expr)
```
**引数**
- `expr` — 任意のデータ型の[式](../syntax.md/#syntax-expressions)のリスト。
**返される値**
64ビットの`xxh3`ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT xxh3('Hello', 'world')
```
結果:
```response
┌─xxh3('Hello', 'world')─┐
│ 5607458076371731292 │
└────────────────────────┘
```
## xxHash32, xxHash64
文字列から`xxHash`を計算します。32ビットと64ビットの2つのフレーバーがあります。
```sql
SELECT xxHash32('')
OR
SELECT xxHash64('')
```
**返される値**
- ハッシュ値。[UInt32/64](../data-types/int-uint.md)。
:::note
戻り型は`xxHash32`の場合`UInt32`、`xxHash64`の場合`UInt64`になります。
:::
**例**
クエリ:
```sql
SELECT xxHash32('Hello, world!');
```
結果:
```response
┌─xxHash32('Hello, world!')─┐
│ 834093149 │
└───────────────────────────┘
```
**関連項目**
- [xxHash](http://cyan4973.github.io/xxHash/)。
## ngramSimHash
ASCII文字列を`ngramsize`シンボルのn-gramに分割し、n-gramの`simhash`を返します。大文字小文字を区別します。
[bitHammingDistance](../functions/bit-functions.md/#bithammingdistance)を使用して、半重複文字列を検出するために使用できます。計算された2つの文字列の`simhashes`の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列は同じ可能性が高くなります。
**構文**
```sql
ngramSimHash(string[, ngramsize])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
**返される値**
- ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT ngramSimHash('ClickHouse') AS Hash;
```
結果:
```response
┌───────Hash─┐
│ 1627567969 │
└────────────┘
```
## ngramSimHashCaseInsensitive
ASCII文字列を`ngramsize`シンボルのn-gramに分割し、n-gramの`simhash`を返します。大文字小文字を区別しません。
[bitHammingDistance](../functions/bit-functions.md/#bithammingdistance)を使用して、半重複文字列を検出するために使用できます。計算された2つの文字列の`simhashes`の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列は同じ可能性が高くなります。
**構文**
```sql
ngramSimHashCaseInsensitive(string[, ngramsize])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
**返される値**
- ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT ngramSimHashCaseInsensitive('ClickHouse') AS Hash;
```
結果:
```response
┌──────Hash─┐
│ 562180645 │
└───────────┘
```
## ngramSimHashUTF8
UTF-8文字列を`ngramsize`シンボルのn-gramに分割し、n-gramの`simhash`を返します。大文字小文字を区別します。
[bitHammingDistance](../functions/bit-functions.md/#bithammingdistance)を使用して、半重複文字列を検出するために使用できます。計算された2つの文字列の`simhashes`の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列は同じ可能性が高くなります。
**構文**
```sql
ngramSimHashUTF8(string[, ngramsize])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
**返される値**
- ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT ngramSimHashUTF8('ClickHouse') AS Hash;
```
結果:
```response
┌───────Hash─┐
│ 1628157797 │
└────────────┘
```
## ngramSimHashCaseInsensitiveUTF8
UTF-8文字列を`ngramsize`シンボルのn-gramに分割し、n-gramの`simhash`を返します。大文字小文字を区別しません。
[bitHammingDistance](../functions/bit-functions.md/#bithammingdistance)を使用して、半重複文字列を検出するために使用できます。計算された2つの文字列の`simhashes`の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列は同じ可能性が高くなります。
**構文**
```sql
ngramSimHashCaseInsensitiveUTF8(string[, ngramsize])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
**返される値**
- ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT ngramSimHashCaseInsensitiveUTF8('ClickHouse') AS Hash;
```
結果:
```response
┌───────Hash─┐
│ 1636742693 │
└────────────┘
```
## wordShingleSimHash
ASCII文字列を`shinglesize`単語の部分(シングル)に分割して、単語シングルの`simhash`を返します。大文字小文字を区別します。
[bitHammingDistance](../functions/bit-functions.md/#bithammingdistance)を使用して、半重複文字列を検出するために使用できます。計算された2つの文字列の`simhashes`の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列は同じ可能性が高くなります。
**構文**
```sql
wordShingleSimHash(string[, shinglesize])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
**返される値**
- ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT wordShingleSimHash('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;
```
結果:
```response
┌───────Hash─┐
│ 2328277067 │
└────────────┘
```
## wordShingleSimHashCaseInsensitive
ASCII文字列を`shinglesize`単語の部分(シングル)に分割して、単語シングルの`simhash`を返します。大文字小文字を区別しません。
[bitHammingDistance](../functions/bit-functions.md/#bithammingdistance)を使用して、半重複文字列を検出するために使用できます。計算された2つの文字列の`simhashes`の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列は同じ可能性が高くなります。
**構文**
```sql
wordShingleSimHashCaseInsensitive(string[, shinglesize])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
**返される値**
- ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT wordShingleSimHashCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;
```
結果:
```response
┌───────Hash─┐
│ 2194812424 │
└────────────┘
```
## wordShingleSimHashUTF8
UTF-8文字列を`shinglesize`単語の部分(シングル)に分割して、単語シングルの`simhash`を返します。大文字小文字を区別します。
[bitHammingDistance](../functions/bit-functions.md/#bithammingdistance)を使用して、半重複文字列を検出するために使用できます。計算された2つの文字列の`simhashes`の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列は同じ可能性が高くなります。
**構文**
```sql
wordShingleSimHashUTF8(string[, shinglesize])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
**返される値**
- ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT wordShingleSimHashUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;
```
結果:
```response
┌───────Hash─┐
│ 2328277067 │
└────────────┘
```
## wordShingleSimHashCaseInsensitiveUTF8
UTF-8文字列を`shinglesize`単語の部分(シングル)に分割して、単語シングルの`simhash`を返します。大文字小文字を区別しません。
[bitHammingDistance](../functions/bit-functions.md/#bithammingdistance)を使用して、半重複文字列を検出するために使用できます。計算された2つの文字列の`simhashes`の[ハミング距離](https://en.wikipedia.org/wiki/Hamming_distance)が小さいほど、それらの文字列は同じ可能性が高くなります。
**構文**
```sql
wordShingleSimHashCaseInsensitiveUTF8(string[, shinglesize])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
**返される値**
- ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT wordShingleSimHashCaseInsensitiveUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Hash;
```
結果:
```response
┌───────Hash─┐
│ 2194812424 │
└────────────┘
```
## wyHash64
64ビットの[wyHash64](https://github.com/wangyi-fudan/wyhash)ハッシュ値を生成します。
**構文**
```sql
wyHash64(string)
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
**返される値**
- ハッシュ値。[UInt64](../data-types/int-uint.md)。
**例**
クエリ:
```sql
SELECT wyHash64('ClickHouse') AS Hash;
```
結果:
```response
┌─────────────────Hash─┐
│ 12336419557878201794 │
└──────────────────────┘
```
## ngramMinHash
ASCII文字列を`ngramsize`シンボルのn-gramに分割し、各n-gramのハッシュ値を計算します。`hashnum`個の最小ハッシュを使用して最小ハッシュを計算し、`hashnum`個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別します。
[tupleHammingDistance](../functions/tuple-functions.md/#tuplehammingdistance)を使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。
**構文**
```sql
ngramMinHash(string[, ngramsize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 2つのハッシュを持つタプル — 最小と最大。[Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md))。
**例**
クエリ:
```sql
SELECT ngramMinHash('ClickHouse') AS Tuple;
```
結果:
```response
┌─Tuple──────────────────────────────────────┐
│ (18333312859352735453,9054248444481805918) │
└────────────────────────────────────────────┘
```
## ngramMinHashCaseInsensitive
ASCII文字列を`ngramsize`シンボルのn-gramに分割し、各n-gramのハッシュ値を計算します。`hashnum`個の最小ハッシュを使用して最小ハッシュを計算し、`hashnum`個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別しません。
[tupleHammingDistance](../functions/tuple-functions.md/#tuplehammingdistance)を使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。
**構文**
```sql
ngramMinHashCaseInsensitive(string[, ngramsize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 2つのハッシュを持つタプル — 最小と最大。[Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md))。
**例**
クエリ:
```sql
SELECT ngramMinHashCaseInsensitive('ClickHouse') AS Tuple;
```
結果:
```response
┌─Tuple──────────────────────────────────────┐
│ (2106263556442004574,13203602793651726206) │
└────────────────────────────────────────────┘
```
## ngramMinHashUTF8
UTF-8文字列を`ngramsize`シンボルのn-gramに分割し、各n-gramのハッシュ値を計算します。`hashnum`個の最小ハッシュを使用して最小ハッシュを計算し、`hashnum`個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別します。
[tupleHammingDistance](../functions/tuple-functions.md/#tuplehammingdistance)を使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。
**構文**
```sql
ngramMinHashUTF8(string[, ngramsize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 2つのハッシュを持つタプル — 最小と最大。[Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md))。
**例**
クエリ:
```sql
SELECT ngramMinHashUTF8('ClickHouse') AS Tuple;
```
結果:
```response
┌─Tuple──────────────────────────────────────┐
│ (18333312859352735453,6742163577938632877) │
└────────────────────────────────────────────┘
```
## ngramMinHashCaseInsensitiveUTF8
UTF-8文字列を`ngramsize`シンボルのn-gramに分割し、各n-gramのハッシュ値を計算します。`hashnum`個の最小ハッシュを使用して最小ハッシュを計算し、`hashnum`個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別しません。
[tupleHammingDistance](../functions/tuple-functions.md/#tuplehammingdistance)を使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。
**構文**
```sql
ngramMinHashCaseInsensitiveUTF8(string [, ngramsize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 2つのハッシュを持つタプル — 最小と最大。[Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md))。
**例**
クエリ:
```sql
SELECT ngramMinHashCaseInsensitiveUTF8('ClickHouse') AS Tuple;
```
結果:
```response
┌─Tuple───────────────────────────────────────┐
│ (12493625717655877135,13203602793651726206) │
└─────────────────────────────────────────────┘
```
## ngramMinHashArg
ASCII文字列を`ngramsize`シンボルのn-gramに分割し、最小および最大ハッシュを計算する[ngramMinHash](#ngramminhash)関数で同じ入力を用いて計算されたn-gramsを返します。大文字小文字を区別します。
**構文**
```sql
ngramMinHashArg(string[, ngramsize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 各`hashnum`個のn-gramsを持つ2つのタプルを含むタプル。[Tuple](../data-types/tuple.md)([Tuple](../data-types/tuple.md)([String](../data-types/string.md)), [Tuple](../data-types/tuple.md)([String](../data-types/string.md)))。
**例**
クエリ:
```sql
SELECT ngramMinHashArg('ClickHouse') AS Tuple;
```
結果:
```response
┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ous','ick','lic','Hou','kHo','use'),('Hou','lic','ick','ous','ckH','Cli')) │
└───────────────────────────────────────────────────────────────────────────────┘
```
## ngramMinHashArgCaseInsensitive
ASCII文字列を`ngramsize`シンボルのn-gramに分割し、最小および最大ハッシュを計算する[ngramMinHashCaseInsensitive](#ngramminhashcaseinsensitive)関数で同じ入力を用いて計算されたn-gramsを返します。大文字小文字を区別しません。
**構文**
```sql
ngramMinHashArgCaseInsensitive(string[, ngramsize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 各`hashnum`個のn-gramsを持つ2つのタプルを含むタプル。[Tuple](../data-types/tuple.md)([Tuple](../data-types/tuple.md)([String](../data-types/string.md)), [Tuple](../data-types/tuple.md)([String](../data-types/string.md)))。
**例**
クエリ:
```sql
SELECT ngramMinHashArgCaseInsensitive('ClickHouse') AS Tuple;
```
結果:
```response
┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ous','ick','lic','kHo','use','Cli'),('kHo','lic','ick','ous','ckH','Hou')) │
└───────────────────────────────────────────────────────────────────────────────┘
```
## ngramMinHashArgUTF8
UTF-8文字列を`ngramsize`シンボルのn-gramに分割し、最小および最大ハッシュを計算する[ngramMinHashUTF8](#ngramminhashutf8)関数で同じ入力を用いて計算されたn-gramsを返します。大文字小文字を区別します。
**構文**
```sql
ngramMinHashArgUTF8(string[, ngramsize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 各`hashnum`個のn-gramsを持つ2つのタプルを含むタプル。[Tuple](../data-types/tuple.md)([Tuple](../data-types/tuple.md)([String](../data-types/string.md)), [Tuple](../data-types/tuple.md)([String](../data-types/string.md)))。
**例**
クエリ:
```sql
SELECT ngramMinHashArgUTF8('ClickHouse') AS Tuple;
```
結果:
```response
┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ous','ick','lic','Hou','kHo','use'),('kHo','Hou','lic','ick','ous','ckH')) │
└───────────────────────────────────────────────────────────────────────────────┘
```
## ngramMinHashArgCaseInsensitiveUTF8
UTF-8文字列を`ngramsize`シンボルのn-gramに分割し、最小および最大ハッシュを計算する[ngramMinHashCaseInsensitiveUTF8](#ngramminhashcaseinsensitiveutf8)関数で同じ入力を用いて計算されたn-gramsを返します。大文字小文字を区別しません。
**構文**
```sql
ngramMinHashArgCaseInsensitiveUTF8(string[, ngramsize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `ngramsize` — n-gramのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 各`hashnum`個のn-gramsを持つ2つのタプルを含むタプル。[Tuple](../data-types/tuple.md)([Tuple](../data-types/tuple.md)([String](../data-types/string.md)), [Tuple](../data-types/tuple.md)([String](../data-types/string.md)))。
**例**
クエリ:
```sql
SELECT ngramMinHashArgCaseInsensitiveUTF8('ClickHouse') AS Tuple;
```
結果:
```response
┌─Tuple─────────────────────────────────────────────────────────────────────────┐
│ (('ckH','ous','ick','lic','kHo','use'),('kHo','lic','ick','ous','ckH','Hou')) │
└───────────────────────────────────────────────────────────────────────────────┘
```
## wordShingleMinHash
ASCII文字列を`shinglesize`単語の部分(シングル)に分割して、各単語シングルのハッシュ値を計算します。`hashnum`個の最小ハッシュを使用して最小ハッシュを計算し、`hashnum`個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別します。
[tupleHammingDistance](../functions/tuple-functions.md/#tuplehammingdistance)を使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。
**構文**
```sql
wordShingleMinHash(string[, shinglesize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 2つのハッシュを持つタプル — 最小と最大。[Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md))。
**例**
クエリ:
```sql
SELECT wordShingleMinHash('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;
```
結果:
```response
┌─Tuple──────────────────────────────────────┐
│ (16452112859864147620,5844417301642981317) │
└────────────────────────────────────────────┘
```
## wordShingleMinHashCaseInsensitive
ASCII文字列を`shinglesize`単語の部分(シングル)に分割して、各単語シングルのハッシュ値を計算します。`hashnum`個の最小ハッシュを使用して最小ハッシュを計算し、`hashnum`個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別しません。
[tupleHammingDistance](../functions/tuple-functions.md/#tuplehammingdistance)を使用して、半重複文字列を検出するために使用できます。2つの文字列の場合: 返されるハッシュのいずれかが両方の文字列で同じである場合、それらの文字列は同じであると考えます。
**構文**
```sql
wordShingleMinHashCaseInsensitive(string[, shinglesize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果の計算に使用される最小および最大ハッシュの数。オプション。可能な値は`1`から`25`までの任意の数。デフォルト値: `6`。[UInt8](../data-types/int-uint.md)।
**返される値**
- 2つのハッシュを持つタプル — 最小と最大。[Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md))。
**例**
クエリ:
```sql
SELECT wordShingleMinHashCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;
```
結果:
```response
┌─Tuple─────────────────────────────────────┐
│ (3065874883688416519,1634050779997673240) │
└───────────────────────────────────────────┘
```
## wordShingleMinHashUTF8
UTF-8文字列を`shinglesize`単語の部分(シングル)に分割して、各単語シングルのハッシュ値を計算します。`hashnum`個の最小ハッシュを使用して最小ハッシュを計算し、`hashnum`個の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別します。
は[tupleHammingDistance](../functions/tuple-functions.md/#tuplehammingdistance)を使用して、半重複文字列の検出に使用できます。2つの文字列に対して、返されたハッシュの1つが両方の文字列で同じであれば、それらの文字列は同じであると考えます。
**構文**
```sql
wordShingleMinHashUTF8(string[, shinglesize, hashnum])
```
**引数**
- `string` — 文字列。 [String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`3`。 [UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`6`。 [UInt8](../data-types/int-uint.md)。
**返される値**
- 2つのハッシュ最小および最大のタプル。 [Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md))。
**例**
クエリ:
```sql
SELECT wordShingleMinHashUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;
```
結果:
```response
┌─Tuple──────────────────────────────────────┐
│ (16452112859864147620,5844417301642981317) │
└────────────────────────────────────────────┘
```
## wordShingleMinHashCaseInsensitiveUTF8
UTF-8文字列を`shinglesize`単語の部分(シングル)に分割し、各単語シングルに対するハッシュ値を計算します。`hashnum`の最小ハッシュを使用して最小ハッシュを計算し、`hashnum`の最大ハッシュを使用して最大ハッシュを計算します。これらのハッシュを含むタプルを返します。大文字小文字を区別しません。
は[tupleHammingDistance](../functions/tuple-functions.md/#tuplehammingdistance)を使用して、半重複文字列の検出に使用できます。2つの文字列に対して、返されたハッシュの1つが両方の文字列で同じであれば、それらの文字列は同じであると考えます。
**構文**
```sql
wordShingleMinHashCaseInsensitiveUTF8(string[, shinglesize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- 2つのハッシュ最小および最大のタプル。[Tuple](../data-types/tuple.md)([UInt64](../data-types/int-uint.md), [UInt64](../data-types/int-uint.md))。
**例**
クエリ:
```sql
SELECT wordShingleMinHashCaseInsensitiveUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).') AS Tuple;
```
結果:
```response
┌─Tuple─────────────────────────────────────┐
│ (3065874883688416519,1634050779997673240) │
└───────────────────────────────────────────┘
```
## wordShingleMinHashArg
ASCII文字列を`shinglesize`単語の部分(シングル)に分割し、同じ入力で[wordshingleMinHash](#wordshingleminhash)関数によって計算された最小および最大ワードハッシュを持つシングルを返します。大文字小文字を区別します。
**構文**
```sql
wordShingleMinHashArg(string[, shinglesize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- `hashnum`ワードシングルを含む2つのタプル。 [Tuple](../data-types/tuple.md)([Tuple](../data-types/tuple.md)([String](../data-types/string.md)), [Tuple](../data-types/tuple.md)([String](../data-types/string.md)))。
**例**
クエリ:
```sql
SELECT wordShingleMinHashArg('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;
```
結果:
```response
┌─Tuple─────────────────────────────────────────────────────────────────┐
│ (('OLAP','database','analytical'),('online','oriented','processing')) │
└───────────────────────────────────────────────────────────────────────┘
```
## wordShingleMinHashArgCaseInsensitive
ASCII文字列を`shinglesize`単語の部分(シングル)に分割し、同じ入力で[wordShingleMinHashCaseInsensitive](#wordshingleminhashcaseinsensitive)関数によって計算された最小および最大ワードハッシュを持つシングルを返します。大文字小文字を区別しません。
**構文**
```sql
wordShingleMinHashArgCaseInsensitive(string[, shinglesize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- `hashnum`ワードシングルを含む2つのタプル。[Tuple](../data-types/tuple.md)([Tuple](../data-types/tuple.md)([String](../data-types/string.md)), [Tuple](../data-types/tuple.md)([String](../data-types/string.md)))。
**例**
クエリ:
```sql
SELECT wordShingleMinHashArgCaseInsensitive('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;
```
結果:
```response
┌─Tuple──────────────────────────────────────────────────────────────────┐
│ (('queries','database','analytical'),('oriented','processing','DBMS')) │
└────────────────────────────────────────────────────────────────────────┘
```
## wordShingleMinHashArgUTF8
UTF-8文字列を`shinglesize`単語の部分(シングル)に分割し、同じ入力で[wordShingleMinHashUTF8](#wordshingleminhashutf8)関数によって計算された最小および最大ワードハッシュを持つシングルを返します。大文字小文字を区別します。
**構文**
```sql
wordShingleMinHashArgUTF8(string[, shinglesize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- `hashnum`ワードシングルを含む2つのタプル。[Tuple](../data-types/tuple.md)([Tuple](../data-types/tuple.md)([String](../data-types/string.md)), [Tuple](../data-types/tuple.md)([String](../data-types/string.md)))。
**例**
クエリ:
```sql
SELECT wordShingleMinHashArgUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;
```
結果:
```response
┌─Tuple─────────────────────────────────────────────────────────────────┐
│ (('OLAP','database','analytical'),('online','oriented','processing')) │
└───────────────────────────────────────────────────────────────────────┘
```
## wordShingleMinHashArgCaseInsensitiveUTF8
UTF-8文字列を`shinglesize`単語の部分(シングル)に分割し、同じ入力で[wordShingleMinHashCaseInsensitiveUTF8](#wordshingleminhashcaseinsensitiveutf8)関数によって計算された最小および最大ワードハッシュを持つシングルを返します。大文字小文字を区別しません。
**構文**
```sql
wordShingleMinHashArgCaseInsensitiveUTF8(string[, shinglesize, hashnum])
```
**引数**
- `string` — 文字列。[String](../data-types/string.md)。
- `shinglesize` — 単語シングルのサイズ。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`3`。[UInt8](../data-types/int-uint.md)。
- `hashnum` — 結果を計算するために使用される最小および最大ハッシュの数。省略可能。可能な値:`1`から`25`までの任意の数。デフォルト値:`6`。[UInt8](../data-types/int-uint.md)。
**返される値**
- `hashnum`ワードシングルを含む2つのタプル。[Tuple](../data-types/tuple.md)([Tuple](../data-types/tuple.md)([String](../data-types/string.md)), [Tuple](../data-types/tuple.md)([String](../data-types/string.md)))。
**例**
クエリ:
```sql
SELECT wordShingleMinHashArgCaseInsensitiveUTF8('ClickHouse® is a column-oriented database management system (DBMS) for online analytical processing of queries (OLAP).', 1, 3) AS Tuple;
```
結果:
```response
┌─Tuple──────────────────────────────────────────────────────────────────┐
│ (('queries','database','analytical'),('oriented','processing','DBMS')) │
└────────────────────────────────────────────────────────────────────────┘
```
## sqidEncode
番号を[Sqid](https://sqids.org/)としてエンコードします。これはYouTubeのようなID文字列です。
出力アルファベットは `abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789` です。
ハッシュのためにこの関数を使用しないでください - 生成されたIDは元の番号にデコード可能です。
**構文**
```sql
sqidEncode(number1, ...)
```
エイリアス: `sqid`
**引数**
- 可変個数のUInt8, UInt16, UInt32またはUInt64の番号。
**返される値**
sqid [String](../data-types/string.md)。
**例**
```sql
SELECT sqidEncode(1, 2, 3, 4, 5);
```
```response
┌─sqidEncode(1, 2, 3, 4, 5)─┐
│ gXHfJ1C6dN │
└───────────────────────────┘
```
## sqidDecode
[Sqid](https://sqids.org/)を元の番号にデコードします。入力文字列が有効なsqidでない場合は、空の配列を返します。
**構文**
```sql
sqidDecode(sqid)
```
**引数**
- sqid - [String](../data-types/string.md)
**返される値**
数値に変換されたsqid [Array(UInt64)](../data-types/array.md)。
**例**
```sql
SELECT sqidDecode('gXHfJ1C6dN');
```
```response
┌─sqidDecode('gXHfJ1C6dN')─┐
│ [1,2,3,4,5] │
└──────────────────────────┘
```