uniqCombined
導入バージョン: v1.1.0
異なる引数値のおおよその個数を計算します。 結果は決定論的です (クエリ処理の順序には依存しません) 。
uniq 関数と比較すると、uniqCombined 関数には次の特徴があります。
- メモリ消費量を数分の一に抑えられます
- 精度が数倍高くなります
- 通常、パフォーマンスはわずかに低下します。ただし、状況によっては uniqCombined のほうが uniq より高いパフォーマンスを示すことがあります。たとえば、ネットワーク経由で多数の集約状態を転送する分散クエリの場合です
実装の詳細
この関数は、集約内のすべてのパラメータに対してハッシュ (String には 64 ビットハッシュ、それ以外には 32 ビット) を計算し、それを計算に使用します。 配列、hash table、誤り補正テーブル付き HyperLogLog の 3 つのアルゴリズムを組み合わせて使用します。
- 異なる要素数が少ない場合は、配列を使用します
- Set のサイズが大きくなると、hash table を使用します
- 要素数がさらに多い場合は、一定量のメモリを使用する HyperLogLog を使用します
構文
uniqCombined(HLL_precision)(x[, ...])
uniqCombined(x[, ...])パラメータ
HLL_precision— オプション。HyperLogLog のセル数の 2 を底とする対数です。デフォルト値は 17 で、実質的に 96 KiB の領域を使用します (2^17 個のセル、それぞれ 6 ビット) 。範囲: [12, 20]。UInt8
引数
x— 可変個の引数。Tuple(T)またはArray(T)またはDateまたはDateTimeまたはStringまたは(U)Int*またはFloat*またはDecimal
戻り値
異なる引数値のおおよその数を表す UInt64 型の値を返します。UInt64
例
基本的な使い方
SELECT uniqCombined(number) FROM numbers(1e6);┌─uniqCombined(number)─┐
│ 1001148 │
└──────────────────────┘カスタム精度
SELECT uniqCombined(15)(number) FROM numbers(1e5);┌─uniqCombined(15)(number)─┐
│ 100768 │
└──────────────────────────┘関連項目