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

uniqCombined64

異なる引数の値のおおよその個数を計算します。uniqCombined と同じですが、String データ型だけでなく、すべてのデータ型に対して 64 ビットのハッシュ値を使用します。

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

パラメータ

  • HLL_precision: HyperLogLog におけるセル数の 2 を底とする対数。オプションとして、関数を uniqCombined64(x[, ...]) のように使用できます。HLL_precision のデフォルト値は 17 で、これは実質的に 96 KiB の領域(2^17 個のセル、各 6 ビット)に相当します。
  • X: 可変個のパラメータ。パラメータには TupleArrayDateDateTimeString、または数値型を指定できます。

返される値

実装の詳細

uniqCombined64 関数は次のように動作します。

  • 集計対象のすべてのパラメータに対してハッシュ(すべてのデータ型に対して 64 ビットハッシュ)を計算し、そのハッシュ値を以降の計算に使用します。
  • 配列、ハッシュテーブル、誤差補正テーブル付き HyperLogLog の 3 つのアルゴリズムを組み合わせて使用します。
    • 異なる要素数が少ない場合は配列を使用します。
    • Set のサイズが大きくなるとハッシュテーブルを使用します。
    • さらに要素数が大きい場合は HyperLogLog を使用し、一定量のメモリのみを占有します。
  • 結果を決定論的に返します(クエリ処理順序に依存しません)。
注記

すべての型に対して 64 ビットハッシュを使用するため、非 String 型に 32 ビットハッシュを使用する uniqCombined の場合と異なり、UINT_MAX を大きく超えるカーディナリティに対しても、非常に大きな誤差が生じることはありません。

uniq 関数と比較すると、uniqCombined64 関数は次の特徴があります。

  • 必要とするメモリ量が数倍少ない。
  • 数倍高い精度で計算します。

次の例では、uniqCombined641e10 個の異なる数値に対して実行し、異なる引数値の個数に非常に近い近似値を返します。

クエリ:

SELECT uniqCombined64(number) FROM numbers(1e10);

結果:

┌─uniqCombined64(number)─┐
│             9998568925 │ -- 10.00 billion
└────────────────────────┘

比較すると、この規模の入力に対しては、uniqCombined 関数はかなり粗い近似値しか返しません。

クエリ:

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

結果:

┌─uniqCombined(number)─┐
│           5545308725 │ -- 5.55 billion
└──────────────────────┘

関連項目