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

uniqCombined64

uniqCombined64

導入バージョン: v20.1

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

この関数は決定的に結果を返します(クエリ処理順序には依存しません)。

注記

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

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

  • メモリ消費量が数倍少ない
  • 計算精度が数倍高い
Details

実装の詳細 この関数は、集約のすべてのパラメータに対して 64 ビットハッシュを計算し、それを用いて計算を行います。 アルゴリズムとして、配列・ハッシュテーブル・誤差補正テーブル付きの HyperLogLog の 3 つを組み合わせて使用します。

  • 相異なる要素数が少ない場合は、配列を使用します
  • 集合のサイズが大きくなると、ハッシュテーブルを使用します
  • さらに要素数が増えると、固定量のメモリで動作する HyperLogLog を使用します

構文

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

パラメーター

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

引数

戻り値

引数の異なる値の概数を表す UInt64 型の数値を返します。UInt64

大規模データセットの例

SELECT uniqCombined64(number) FROM numbers(1e10);
┌─uniqCombined64(number)─┐
│             9998568925 │
└────────────────────────┘

uniqCombinedとの比較

-- uniqCombined64 with large dataset
SELECT uniqCombined64(number) FROM numbers(1e10);

-- uniqCombined with same dataset shows poor approximation
SELECT uniqCombined(number) FROM numbers(1e10);
┌─uniqCombined64(number)─┐
│             9998568925 │ -- 10.00 billion
└────────────────────────┘
┌─uniqCombined(number)─┐
│           5545308725 │ -- 5.55 billion
└──────────────────────┘

関連項目