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 結構。