uniq
導入バージョン: v1.1.0 引数の異なる値のおおよその数を計算します。 この関数は適応的なサンプリングアルゴリズムを使用します。計算状態には、最大 65536 個の要素ハッシュ値のサンプルを使用します。このアルゴリズムは非常に高精度で、CPU 上でも非常に効率的です。クエリにこの関数が複数含まれている場合でも、uniq の使用速度は他の集約関数とほぼ同等です。実装の詳細
実装の詳細
この関数は、集約内のすべてのパラメータに対してハッシュを計算し、それを計算に使用します。
適応的なサンプリングアルゴリズムを使用します。
計算状態には、最大 65536 個の要素ハッシュ値のサンプルを使用します。
このアルゴリズムは非常に高精度で、CPU 上でも非常に効率的です。
クエリにこの関数が複数含まれている場合でも、
uniq の使用速度は他の集約関数とほぼ同等です。サンプルが保持するのは 32 ビットハッシュであり、数十億を超える値は区別できません。そのため、
完全な 64 ビットハッシュを大幅に間引いた小さなサンプル (約 262144 値につき 1 ハッシュ、上限 16384 ハッシュ) も
併せて保持し、値がおよそ 20 億に達した時点で推定にはこちらが使われるようになります。これにより、
数千億以上のカーディナリティでも推定値は高精度 (誤差約 1% 以内) に保たれます。26.8 より前のサーバーでは、
このような場合に不正な値が返されていました (issue #6078) 。それらのサーバーで書き込まれたステートには 64 ビットサンプルが含まれないため、
それらとマージした場合、マージ元の値については 32 ビットの精度しか保持されません。x— この関数は可変個の引数を受け取ります。Tuple(T)またはArray(T)またはDateまたはDateTimeまたはStringまたは(U)Int*またはFloat*またはDecimal
UInt64
例
使用例
Query
Response
Query
Response