Skip to main content
Edit this page

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を使用します。
  • 結果は決定論的に提供されます(クエリの処理順序に依存しません)。
Note

String型に対して32ビットハッシュを使用するため、UINT_MAXを大きく超える基数の場合、結果の誤差が非常に高くなります(数十億の異なる値を超えたあたりから誤差が急激に上がります)。この場合はuniqCombined64を使用すべきです。

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

  • メモリ消費が数倍少ないです。
  • 精度が数倍高く計算されます。
  • 通常、パフォーマンスがやや低いです。一部のシナリオでは、uniqCombineduniqよりも優れたパフォーマンスを発揮することがあります。例えば、大量の集約状態をネットワーク経由で送信する分散クエリの場合です。

クエリ:

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

結果:

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

より大きな入力の例として、uniqCombineduniqCombined64の違いについては、uniqCombined64の例のセクションを参照してください。

関連項目