ClickHouse/docs/zh/sql-reference/aggregate-functions/reference/uniqcombined.md
2023-03-03 10:35:07 +00:00

2.4 KiB
Raw Blame History

slug sidebar_position
/zh/sql-reference/aggregate-functions/reference/uniqcombined 192

uniqCombined

计算不同参数值的近似数量。

语法

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

uniqCombined 函数是计算不同值数量的不错选择。

参数

该函数采用可变数量的参数。 参数可以是 Tuple, Array, Date, DateTime, String,或数字类型。

HLL_precision 是以2为底的单元格数的对数 HyperLogLog。可选,您可以将该函数用作 uniqCombined(x[, ...])HLL_precision 的默认值是17这是有效的96KiB的空间2^17个单元每个6比特

返回值

  • 一个UInt64类型的数字。

实现细节

功能:

  • 为聚合中的所有参数计算哈希(String类型用64位哈希其他32位然后在计算中使用它。

  • 使用三种算法的组合数组、哈希表和包含错误修正表的HyperLogLog。

    少量的不同的值,使用数组。 值再多一些使用哈希表。对于大量的数据来说使用HyperLogLogHyperLogLog占用一个固定的内存空间。

  • 确定性地提供结果(它不依赖于查询处理顺序)。

:::note 由于它对非 String 类型使用32位哈希对于基数显著大于UINT_MAX ,结果将有非常高的误差(误差将在几百亿不同值之后迅速提高), 因此这种情况,你应该使用 uniqCombined64 :::

相比于 uniq 函数, 该 uniqCombined:

  • 消耗内存要少几倍。
  • 计算精度高出几倍。
  • 通常具有略低的性能。 在某些情况下, uniqCombined 可以表现得比 uniq 好,例如,使用通过网络传输大量聚合状态的分布式查询。

参见