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