HLL_MERGE_AGG()

聚合函数,将多个 HyperLogLog(HLL)草图合并为一个组合草图。这使得分层近似去重计数成为可能:可将来自不同分区或时间窗口的预聚合草图进行合并。

函数说明

HLL_MERGE_AGG() 是一个聚合函数,接收一列 HLL 草图(通常由 HLL_ADD_AGG() 生成)并将它们合并为一个组合草图。合并后的草图可以通过 HLL_CARDINALITY() 查询,以估算所有原始数据中总的去重值个数。

这对于分层聚合非常有用:可以先按天预聚合草图,存入表中,然后在多天之间合并以获得每周或每月的去重计数,而无需重新扫描原始数据。

如果所有输入草图均为 NULL,则返回基数为 0 的空草图。

Syntax

> HLL_MERGE_AGG(sketch)

Arguments

参数

说明

sketch

必填。一个 BLOB 列,包含由 HLL_ADD_AGG() 生成的 HLL 草图。

返回值

返回包含合并后的 HyperLogLog 草图的 BLOB。如果所有输入草图均为 NULL,则返回基数为 0 的空草图。

Examples

DROP DATABASE IF EXISTS dbfuncs;
CREATE DATABASE dbfuncs;
USE dbfuncs;

-- 创建每日草图,然后在多天之间合并
CREATE TABLE hll_01(dt DATE, user_id INT);
INSERT INTO hll_01 VALUES ('2026-05-01', 1), ('2026-05-01', 1), ('2026-05-01', 2), ('2026-05-02', 2), ('2026-05-02', 3), ('2026-05-02', NULL);

-- 存储每日草图
CREATE TABLE hll_daily(dt DATE, sketch BLOB);
INSERT INTO hll_daily SELECT dt, HLL_ADD_AGG(user_id) FROM hll_01 GROUP BY dt;

-- 合并所有每日草图
SELECT HLL_CARDINALITY(HLL_MERGE_AGG(sketch)) FROM hll_daily;

-- NULL 输入合并为空草图,HLL_CARDINALITY 返回 0
SELECT HLL_CARDINALITY(HLL_MERGE_AGG(NULL));

DROP TABLE hll_daily;
DROP TABLE hll_01;
DROP DATABASE dbfuncs;