HyperLogLog++函数为近似聚合函数,当数据量非常大时,能够使用较小的内存空间快速完成数据去重,加速查询。本文介绍HyperLogLog++相关函数。
背景信息
HyperLogLog(简称HLL)是一种高效的近似去重算法,适用于对精度要求不高的场景(如PV/UV统计),可作为 COUNT(DISTINCT) 的轻量级替代方案。与Bitmap等精确去重方法不同,HLL内部采用固定大小的数据结构(sketch),其内存占用不随数据量增长而扩大。每次新数据流入时,仅需计算一次Hash。在大数据量的场景下,HLL的去重误差通常控制在1%以内,甚至更低,兼顾了效率与可用性。
为满足基础近似去重需求,MaxCompute提供了聚合函数APPROX_DISTINCT。随着业务场景不断丰富,越来越多用户希望不仅能输出最终去重结果,还能存储或复用中间的sketch数据结构。为此,MaxCompute进一步支持完整的HyperLogLog++函数集,并对底层算法进行了优化。在降低内存占用的同时,进一步提升了估算精度,更好地支撑复杂分析场景。
以下列举两个HLL的典型适用场景:
需按时间维度反复查询的场景:通过持久化每日生成的 HLL sketch,后续计算仅需处理当天新增数据,并与历史 sketch 合并,无需重复扫描全量历史数据,显著提升查询效率。
对多个同类型列进行联合去重的场景:可分别为各列构建并保留对应的 sketch,后续直接在 sketch 层面执行合并(merge)操作,实现去重结果的高效复用,大幅降低计算开销。
函数列表
MaxCompute SQL支持的HyperLogLog++函数如下。
函数 | 功能 |
将相同类型的值聚合成一个新的HLL++ sketch。 | |
合并存储类型相同的多个 HLL++ sketch成一个新的sketch。 | |
从一个HLL++ sketch计算得到基数估计值。 | |
合并存储类型相同的多个 HLL++ sketch成一个新的sketch,并返回合并后sketch的基数估算值。 |
注意事项
HLL_COUNT_EXTRACT/HLL_COUNT_MERGE/HLL_COUNT_MERGE_PARTIAL函数使用的BINARY数据需要来源于HLL_COUNT_INIT函数, 不能来源于其他系统或者其他方式。