HLL_MERGE_AGG()¶
聚合函数,将多个 HyperLogLog(HLL)草图合并为一个组合草图。这使得分层近似去重计数成为可能:可将来自不同分区或时间窗口的预聚合草图进行合并。
函数说明¶
HLL_MERGE_AGG() 是一个聚合函数,接收一列 HLL 草图(通常由 HLL_ADD_AGG() 生成)并将它们合并为一个组合草图。合并后的草图可以通过 HLL_CARDINALITY() 查询,以估算所有原始数据中总的去重值个数。
这对于分层聚合非常有用:可以先按天预聚合草图,存入表中,然后在多天之间合并以获得每周或每月的去重计数,而无需重新扫描原始数据。
如果所有输入草图均为 NULL,则返回基数为 0 的空草图。
Syntax¶
> HLL_MERGE_AGG(sketch)
Arguments¶
参数 |
说明 |
|---|---|
sketch |
必填。一个 |
返回值¶
返回包含合并后的 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;