HyperLogLog 函数

openLooKeng 使用 HyperLogLog 数据结构实现 approx_distinct 函数。

数据结构

openLooKeng 将 HyperLogLog 数据草图实现为一组存储最大哈希的 32 位数据桶。这些数据桶能够以稀疏(作为数据桶 ID 到数据桶的映射)或密集(作为连续的内存块)的方式存储。HyperLogLog 数据结构以稀疏表示开始,当它更高效时会切换到密集表示。P4HyperLogLog 结构以密集方式初始化,并且在其生命周期内保持密集。

hyperloglog_type 隐式转换为 p4hyperloglog_type,您可以显式地将 HyperLogLog 转换为 P4HyperLogLog

cast(hll AS P4HyperLogLog)

序列化

可以将数据草图序列化为 varbinary,也可以从中反序列化数据草图。这样就可以存储数据草图供以后使用。这与合并多个草图的功能相结合,使您能够计算查询分区元素的 approx_distinct,然后以很小的代价计算整个查询。

例如,计算每日唯一用户的 HyperLogLog 之后,可以通过合并每日数据以增量方式计算每周或每月的唯一用户。这类似于通过汇总每日收入来计算每周收入。可以将 approx_distinctGROUPING SETS 的结合使用转换为使用 HyperLogLog。示例:

CREATE TABLE visit_summaries (
  visit_date date,
  hll varbinary
);

INSERT INTO visit_summaries
SELECT visit_date, cast(approx_set(user_id) AS varbinary)
FROM user_visits
GROUP BY visit_date;

SELECT cardinality(merge(cast(hll AS HyperLogLog))) AS weekly_unique_users
FROM visit_summaries
WHERE visit_date >= current_date - interval '7' day;

函数

approx_set(x) -> HyperLogLog

返回 x 的输入数据集的 HyperLogLog 草图。该数据草图是 approx_distinct 的基础,以后可以通过调用 cardinality() 来存储和使用该数据草图。

cardinality(hll) -> bigint

这将对 hll HyperLogLog 数据草图汇总的数据执行 approx_distinct

empty_approx_set() -> HyperLogLog

返回一个空 HyperLogLog

merge(HyperLogLog) -> HyperLogLog

返回各个 hll HyperLogLog 结构聚合合并的 HyperLogLog

有奖捉虫

“有虫”文档片段

0/500

存在的问题

文档存在风险与错误

● 拼写,格式,无效链接等错误;

● 技术原理、功能、规格等描述和软件不一致,存在错误;

● 原理图、架构图等存在错误;

● 版本号不匹配:文档版本或内容描述和实际软件不一致;

● 对重要数据或系统存在风险的操作,缺少安全提示;

● 排版不美观,影响阅读;

内容描述不清晰

● 描述存在歧义;

● 图形、表格、文字等晦涩难懂;

● 逻辑不清晰,该分类、分项、分步骤的没有给出;

内容获取有困难

● 很难通过搜索引擎,openLooKeng官网,相关博客找到所需内容;

示例代码错误

● 命令、命令参数等错误;

● 命令无法执行或无法完成对应功能;

内容有缺失

● 关键步骤错误或缺失,无法指导用户完成任务,比如安装、配置、部署等;

● 逻辑不清晰,该分类、分项、分步骤的没有给出

● 图形、表格、文字等晦涩难懂

● 缺少必要的前提条件、注意事项等;

● 描述存在歧义

0/500

您对文档的总体满意度

非常不满意
非常满意

请问是什么原因让您参与到这个问题中

您的邮箱

创Issue赢奖品
根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
有奖捉虫