メインコンテンツへスキップ

uniqCombined

導入バージョン: v1.1.0 異なる引数値のおおよその個数を計算します。 結果は決定論的です (クエリ処理の順序には依存しません) 。
String 以外の型には 32 ビットハッシュを使用するため、カーディナリティが UINT_MAX を大幅に超える場合、結果の誤差は非常に大きくなります (異なる値が数百億件規模になると、誤差は急速に増加します) 。 カーディナリティが UINT_MAX を超える場合は、代わりに uniqCombined64 を使用してください。
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
引数 戻り値 異なる引数値のおおよその数を表す UInt64 型の値を返します。UInt64 基本的な使い方
Query
SELECT uniqCombined(number) FROM numbers(1e6);
Response
┌─uniqCombined(number)─┐
│              1001148 │
└──────────────────────┘
カスタム精度
Query
SELECT uniqCombined(15)(number) FROM numbers(1e5);
Response
┌─uniqCombined(15)(number)─┐
│                   100768 │
└──────────────────────────┘
関連項目
最終更新日 2026年6月10日