HLL_CARDINALITY()

从 HLL_ADD_AGG 或 HLL_MERGE_AGG 生成的 HyperLogLog(HLL)草图返回近似去重值个数。相较于精确的 COUNT(DISTINCT),该方法更节省内存,典型误差率约为 1-2%。

函数说明

HLL_CARDINALITY() 从 HLL 草图中提取近似基数估算值。该草图必须由 HLL_ADD_AGG()HLL_MERGE_AGG() 生成。

如果草图参数为 NULL,函数返回 NULL。传入非 HLL 草图的 VARBINARY 值可能产生意外结果。

Syntax

> HLL_CARDINALITY(sketch)

Arguments

参数

说明

sketch

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

返回值

返回一个整数值,表示估算的去重值个数。如果输入草图为 NULL,则返回 NULL

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);

-- 直接从草图获取基数
SELECT HLL_CARDINALITY(HLL_ADD_AGG(user_id)) FROM hll_01;

-- 按天获取基数
SELECT dt, HLL_CARDINALITY(HLL_ADD_AGG(user_id)) FROM hll_01 GROUP BY dt ORDER BY dt;

-- NULL 草图返回 NULL
SELECT HLL_CARDINALITY(NULL);

DROP TABLE hll_01;
DROP DATABASE dbfuncs;