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 ビット) を計算し、そのハッシュ値を用いて計算を行います。 - 3 つのアルゴリズム (配列、ハッシュテーブル、誤差補正テーブル付き HyperLogLog) の組み合わせを使用します。
- 異なる要素数が少ない場合は、配列が使用されます。
- 集合のサイズが大きくなると、ハッシュテーブルが使用されます。
- 要素数がさらに多い場合は、HyperLogLog が使用され、一定量のメモリを占有します。
- 決定論的な結果を返します (結果はクエリ処理順序に依存しません)。
注記
String 以外の型では 32 ビットハッシュを使用するため、基数が UINT_MAX を大きく超える場合には誤差が非常に大きくなります (数百億の異なる値を超えると急速に誤差が増大します)。したがって、このような場合は uniqCombined64 を使用する必要があります。
uniq 関数と比較すると、uniqCombined 関数は次の特徴があります:
- メモリ消費量が数倍少ない。
- 精度が数倍高い。
- 通常はパフォーマンスがやや低くなります。一部のシナリオでは、たとえば多くの集約状態をネットワーク経由で送信する分散クエリでは、
uniqCombinedの方がuniqよりも高いパフォーマンスを発揮する場合があります。
例
クエリ:
結果:
はるかに大きな入力に対する uniqCombined と uniqCombined64 の違いの例については、uniqCombined64 の例のセクションを参照してください。
関連項目