Skip to main content
Version: 1.1.1

HyperLogLog Functions

Pollux 使用 HyperLogLog 数据结构 实现了 Presto 的 approx_distinct 函数。

Data Structures

与 Presto 类似,Pollux 将 HyperLogLog 数据草图实现为一组 32 位存储桶,用于存储最大哈希值。它们可以稀 疏存储(作为从存储桶 ID 到存储桶的映射),也可以密集存储(作为连续的内存块)。HyperLogLog 数据结构最初采 用稀疏表示,当效率更高时,会切换到密集表示。

Serialization

数据草图可以序列化为“varbinary”并从“varbinary”反序列化。这样,它们就可以存储起来以供日后使用。结合合并多个草图的 功能,这允许以极低的成本计算查询分区元素的:func:approx_distinct,然后计算整个查询的:func:approx_distinct

例如,计算每日独立用户数的“HyperLogLog”将允许通过合并每日数据来逐步计算每周或每月独立用户数。这类似于通过汇总每日收入来计算每周收入。

序列化格式与 Presto 的序列化格式兼容(实际上完全相同)。

Functions

    approx_set(x) -> HyperLogLog

返回输入数据集“x”的“HyperLogLog”草图。
最大标准误差值默认为“0.01625”。
此数据草图是`approx_distinct`函数的基础,可以存储并稍后通过调用``cardinality()``使用。
    approx_set(x, e) -> HyperLogLog

返回输入数据集“x”的“HyperLogLog”草图,其最大标准误差为“e”。此函数的当前实现要
求“e”在“[0.0040625, 0.26000]”范围内。此数据草图是:func:`approx_distinct`函数的基
础,可以存储并在以后通过调用``cardinality()``使用。
    cardinality(hll) -> bigint

这将对“hll” HyperLogLog 数据概要所汇总的数据执行“approx_distinct”。
    empty_approx_set() -> HyperLogLog

傳回一個空的HyperLogLo」。最大標準誤差的值預設為“0.01625”。
    empty_approx_set(e) -> HyperLogLog

傳回一個空的“HyperLogLog”,其最大標準誤差為“e”。此函數的目前實作要求“e”位於
範圍為「[0.0040625, 0.26000]」。
    merge(HyperLogLog) -> HyperLogLog

傳回各個“hll”的聚合並集的“HyperLogLog”HyperLogLog 結構。