HLL_ADD_AGG()¶
聚合函数,根据列值构建 HyperLogLog(HLL)草图(sketch),该草图后续可由 HLL_CARDINALITY 消费以估算去重值的个数。
函数说明¶
HLL_ADD_AGG() 是一个聚合函数,对一组值计算 HyperLogLog 草图。结果是一个 HLL 草图的二进制 BLOB 表示,可存储到表中或直接传递给 HLL_CARDINALITY() 以获得近似去重计数估算值。
HyperLogLog 是一种概率性基数估计算法,相比精确的 COUNT(DISTINCT ...) 占用显著更少的内存。代价是可接受且可调优的误差率(通常在 1-2% 左右)。
HLL_ADD_AGG() 忽略 NULL 值。如果聚合中的所有值均为 NULL,则结果为空草图,其基数为 0。
Syntax¶
> HLL_ADD_AGG(expr)
Arguments¶
参数 |
说明 |
|---|---|
expr |
必填。需要估算去重值的列或表达式。接受任意可比较的数据类型。 |
返回值¶
返回包含二进制 HyperLogLog 草图的 BLOB。输入集为空或仅包含 NULL 时,返回基数为 0 的空草图。
Examples¶
DROP DATABASE IF EXISTS dbfuncs;
CREATE DATABASE dbfuncs;
USE dbfuncs;
-- 基于用户 ID 构建 HLL 草图
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);
-- 估算所有行的去重 user_ids
SELECT HLL_CARDINALITY(HLL_ADD_AGG(user_id)) FROM hll_01;
-- 按天估算去重 user_ids
SELECT dt, HLL_CARDINALITY(HLL_ADD_AGG(user_id)) FROM hll_01 GROUP BY dt ORDER BY dt;
DROP TABLE hll_01;
DROP DATABASE dbfuncs;