uniqCombined
異なる引数値の概算数を計算します。
uniqCombined
関数は、異なる値の数を計算するための良い選択肢です。
引数
HLL_precision
: HyperLogLogのセルの数の2の冪対数。オプションで、関数をuniqCombined(x[, ...])
として使用できます。HLL_precision
のデフォルト値は17で、実質的に96 KiBのスペース(2^17セル、各6ビット)を占有します。X
: 可変数のパラメータ。パラメータはTuple
、Array
、Date
、DateTime
、String
、または数値型です。
返される値
- UInt64-型の数値。
実装の詳細
uniqCombined
関数は:
- 集約内のすべてのパラメータのハッシュ(
String
の場合は64ビットハッシュ、その他は32ビット)を計算し、計算に使用します。 - 配列、ハッシュテーブル、およびエラー訂正テーブルを持つHyperLogLogの3つのアルゴリズムの組み合わせを使用します。
- 少数の異なる要素の場合、配列が使用されます。
- セットサイズが大きくなると、ハッシュテーブルが使用されます。
- より多くの要素の場合、固定メモリ量を占有するHyperLogLogが使用されます。
- 結果は決定論的に提供されます(クエリ処理順序には依存しません)。
注記
非String
型に対して32ビットハッシュを使用するため、結果はUINT_MAX
を大幅に超えるカーディナリティに対して非常に高い誤差が出ます(異なる値の数が数十億を超えると誤差は急速に増加します)。したがって、この場合はuniqCombined64を使用するべきです。
uniq関数と比較して、uniqCombined
関数は:
- 数倍少ないメモリを消費します。
- 数倍高い精度で計算します。
- 通常はわずかに性能が低くなります。特定のシナリオでは、
uniqCombined
はネットワーク経由で多数の集約状態を送信する分散クエリのような場合にuniq
よりも優れたパフォーマンスを発揮することがあります。
例
クエリ:
結果:
uniqCombined
とuniqCombined64
の間の違いに関する例については、uniqCombined64の例のセクションを参照してください。
関連事項