跳转到主内容
跳转到主内容

uniqCombined64

uniqCombined64

引入于:v20.1

计算不同参数值的近似数量。 它与 uniqCombined 相同,但对所有数据类型都使用 64 位哈希,而不仅仅是对 String 数据类型使用。

此函数以确定性的方式返回结果(结果不依赖于查询处理顺序)。

注意

由于它对所有类型都使用 64 位哈希,因此在基数显著大于 UINT_MAX 时,结果不会像使用 32 位哈希处理非 String 类型的 uniqCombined 那样出现非常高的误差。

uniq 函数相比,uniqCombined64 函数:

  • 内存消耗减少数倍
  • 计算精度提高数倍
Details

实现细节 此函数对聚合中所有参数的所有数据类型计算 64 位哈希,然后在计算中使用该哈希。 它组合使用了三种算法:数组、哈希表,以及带有误差修正表的 HyperLogLog

  • 当不同元素数量较少时,使用数组
  • 当集合大小进一步增大时,使用哈希表
  • 当元素数量更大时,使用 HyperLogLog,它只占用固定大小的内存

语法

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

参数

  • HLL_precision — 可选。HyperLogLog 中单元格数量的二进制对数。默认值为 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
└──────────────────────┘

另请参阅