メインコンテンツへスキップ
メインコンテンツへスキップ

uniqCombined

uniqCombined

導入バージョン: v1.1

異なる引数値のおおよその個数を計算します。 結果は決定論的であり(クエリ処理順序に依存せず)、常に同じになります。

注記

非 String 型に対して 32 ビットハッシュを使用するため、UINT_MAX を大きく超えるカーディナリティに対しては結果の誤差が非常に大きくなります(数百億程度の異なる値を超えたあたりから急激に誤差が増加します)。 カーディナリティが UINT_MAX より大きい場合は、代わりに uniqCombined64 を使用する必要があります。

uniq 関数と比較して、uniqCombined 関数は次の特徴があります:

  • 消費するメモリ量が数倍少ない
  • 計算精度が数倍高い
  • 通常はパフォーマンスがわずかに低下します。ある種のシナリオでは、例えば多くの集約状態をネットワーク経由で送信する分散クエリでは、uniqCombineduniq より高速に動作する場合もあります
Details

Implementation details この関数は、集約内のすべてのパラメータに対してハッシュ(String 型には 64 ビットハッシュ、それ以外には 32 ビットハッシュ)を計算し、そのハッシュ値を用いて計算を行います。 配列、ハッシュテーブル、HyperLogLog と誤差補正テーブルの 3 つのアルゴリズムを組み合わせて使用します:

  • 異なる要素数が少ない場合は配列を使用します
  • 集合のサイズがより大きくなるとハッシュテーブルを使用します
  • さらに要素数が多い場合は HyperLogLog を使用し、これは一定量のメモリのみを消費します

構文

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

パラメータ

  • HLL_precision — 省略可能。HyperLogLog のセル数の底 2 の対数。デフォルト値は 17 で、これは実質的に 96 KiB の領域(2^17 個のセル、各 6 ビット)に相当します。範囲: [12, 20]。UInt8

引数

返される値

異なる引数値のおおよその個数を表す UInt64 型の数値を返します。UInt64

基本的な使い方

SELECT uniqCombined(number) FROM numbers(1e6);
┌─uniqCombined(number)─┐
│              1001148 │
└──────────────────────┘

カスタム精度を使用する場合

SELECT uniqCombined(15)(number) FROM numbers(1e5);
┌─uniqCombined(15)(number)─┐
│                   100768 │
└──────────────────────────┘

関連項目