uniqCombined64
異なる引数の値のおおよその個数を計算します。uniqCombined と同じですが、String データ型だけでなく、すべてのデータ型に対して 64 ビットのハッシュ値を使用します。
パラメータ
HLL_precision: HyperLogLog におけるセル数の 2 を底とする対数。オプションとして、関数をuniqCombined64(x[, ...])のように使用できます。HLL_precisionのデフォルト値は 17 で、これは実質的に 96 KiB の領域(2^17 個のセル、各 6 ビット)に相当します。X: 可変個のパラメータ。パラメータにはTuple、Array、Date、DateTime、String、または数値型を指定できます。
返される値
- UInt64 型の数値。
実装の詳細
uniqCombined64 関数は次のように動作します。
- 集計対象のすべてのパラメータに対してハッシュ(すべてのデータ型に対して 64 ビットハッシュ)を計算し、そのハッシュ値を以降の計算に使用します。
- 配列、ハッシュテーブル、誤差補正テーブル付き HyperLogLog の 3 つのアルゴリズムを組み合わせて使用します。
- 異なる要素数が少ない場合は配列を使用します。
- Set のサイズが大きくなるとハッシュテーブルを使用します。
- さらに要素数が大きい場合は HyperLogLog を使用し、一定量のメモリのみを占有します。
- 結果を決定論的に返します(クエリ処理順序に依存しません)。
注記
すべての型に対して 64 ビットハッシュを使用するため、非 String 型に 32 ビットハッシュを使用する uniqCombined の場合と異なり、UINT_MAX を大きく超えるカーディナリティに対しても、非常に大きな誤差が生じることはありません。
uniq 関数と比較すると、uniqCombined64 関数は次の特徴があります。
- 必要とするメモリ量が数倍少ない。
- 数倍高い精度で計算します。
例
次の例では、uniqCombined64 を 1e10 個の異なる数値に対して実行し、異なる引数値の個数に非常に近い近似値を返します。
クエリ:
結果:
比較すると、この規模の入力に対しては、uniqCombined 関数はかなり粗い近似値しか返しません。
クエリ:
結果:
関連項目