uniqCombined64
计算不同参数取值的近似数量。该函数与 uniqCombined 相同,但对所有数据类型都使用 64 位哈希值,而不仅仅是对 String 数据类型使用。
参数
HLL_precision: HyperLogLog 中单元格数量的以 2 为底的对数。你也可以将函数写为uniqCombined64(x[, ...])。HLL_precision的默认值为 17,这实际上占用 96 KiB 的空间(2^17 个单元格,每个 6 位)。X:数量可变的参数。参数可以是Tuple、Array、Date、DateTime、String或数值类型。
返回值
- 一个 UInt64 类型的数字。
实现细节
uniqCombined64 函数:
- 对聚合中的所有参数计算哈希值(所有数据类型都使用 64 位哈希),然后在计算中使用该哈希值。
- 使用三种算法的组合:数组、哈希表和带误差校正表的 HyperLogLog。
- 对于较少数量的不同元素,使用数组。
- 当集合的大小更大时,使用哈希表。
- 对于更多数量的元素,使用 HyperLogLog,其将占用固定数量的内存。
- 以确定性的方式提供结果(不依赖于查询处理顺序)。
注意
由于对所有类型都使用 64 位哈希,结果在基数显著大于 UINT_MAX 时也不会像 uniqCombined 那样出现非常高的误差,后者对非 String 类型使用 32 位哈希。
与 uniq 函数相比,uniqCombined64 函数:
- 消耗的内存要少数倍。
- 计算精度高出数倍。
示例
在下面的示例中,uniqCombined64 在 1e10 个不同数字上执行,返回的值是对不同参数值数量非常接近的估计值。
查询:
结果:
相比之下,对于这种规模的输入数据,uniqCombined 函数返回的近似结果要差得多。
查询:
结果:
另请参阅