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 つのアルゴリズムの組み合わせを使用します。
- 小さな異なる要素の数の場合、配列が使用されます。
- 集合のサイズが大きくなると、ハッシュテーブルが使用されます。
- より大きな数の要素については、固定サイズのメモリを占める HyperLogLog が使用されます。
- 結果を決定論的に提供します(クエリ処理順序に依存しません)。
注記
すべての型に対して 64 ビットハッシュを使用するため、結果は UINT_MAX
よりもはるかに大きな基数に対して非常に高いエラーの影響を受けません。これは 32 ビットハッシュを使用する uniqCombined とは異なります。
uniq 関数と比較して、uniqCombined64
関数は:
- メモリを数倍少なく消費します。
- 数倍高い精度で計算します。
例
以下の例では、uniqCombined64
が 1e10
異なる数値に対して実行され、異なる引数値の非常に近い概算を返します。
クエリ:
結果:
比較すると、uniqCombined
関数はこのサイズの入力に対してはかなり不正確な近似値を返します。
クエリ:
結果:
参照