メインコンテンツまでスキップ
メインコンテンツまでスキップ

uniqCombined

異なる引数値の概算数を計算します。

uniqCombined(HLL_precision)(x[, ...])

uniqCombined関数は、異なる値の数を計算するための良い選択肢です。

引数

  • HLL_precision: HyperLogLogのセルの数の2の冪対数。オプションで、関数をuniqCombined(x[, ...])として使用できます。HLL_precisionのデフォルト値は17で、実質的に96 KiBのスペース(2^17セル、各6ビット)を占有します。
  • X: 可変数のパラメータ。パラメータはTupleArrayDateDateTimeString、または数値型です。

返される値

実装の詳細

uniqCombined関数は:

  • 集約内のすべてのパラメータのハッシュ(Stringの場合は64ビットハッシュ、その他は32ビット)を計算し、計算に使用します。
  • 配列、ハッシュテーブル、およびエラー訂正テーブルを持つHyperLogLogの3つのアルゴリズムの組み合わせを使用します。
    • 少数の異なる要素の場合、配列が使用されます。
    • セットサイズが大きくなると、ハッシュテーブルが使用されます。
    • より多くの要素の場合、固定メモリ量を占有するHyperLogLogが使用されます。
  • 結果は決定論的に提供されます(クエリ処理順序には依存しません)。
注記

String型に対して32ビットハッシュを使用するため、結果はUINT_MAXを大幅に超えるカーディナリティに対して非常に高い誤差が出ます(異なる値の数が数十億を超えると誤差は急速に増加します)。したがって、この場合はuniqCombined64を使用するべきです。

uniq関数と比較して、uniqCombined関数は:

  • 数倍少ないメモリを消費します。
  • 数倍高い精度で計算します。
  • 通常はわずかに性能が低くなります。特定のシナリオでは、uniqCombinedはネットワーク経由で多数の集約状態を送信する分散クエリのような場合にuniqよりも優れたパフォーマンスを発揮することがあります。

クエリ:

SELECT uniqCombined(number) FROM numbers(1e6);

結果:

┌─uniqCombined(number)─┐
│              1001148 │ -- 1.00 million
└──────────────────────┘

uniqCombineduniqCombined64の間の違いに関する例については、uniqCombined64の例のセクションを参照してください。

関連事項