ddsketch
实现DDSketch数据结构,实现在线的Quantile聚合
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
ddsketch | 1.0.1 | FUNC | PostgreSQL | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4650 | ddsketch | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | omnisketch quantile lower_quantile topn count_distinct hll first_last_agg |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 1.0.1 | 1817161514 | ddsketch | - |
| RPM | PIGSTY | 1.0.1 | 1817161514 | ddsketch_$v | - |
| DEB | PIGSTY | 1.0.1 | 1817161514 | postgresql-$v-ddsketch | - |
构建
您可以使用 pig build 命令构建 ddsketch 扩展的 RPM / DEB 包:
pig build pkg ddsketch # 构建 RPM / DEB 包
安装
您可以直接安装 ddsketch 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install ddsketch; # 当前活跃 PG 版本安装
pig ext install -y ddsketch -v 18 # PG 18
pig ext install -y ddsketch -v 17 # PG 17
pig ext install -y ddsketch -v 16 # PG 16
pig ext install -y ddsketch -v 15 # PG 15
pig ext install -y ddsketch -v 14 # PG 14
dnf install -y ddsketch_18 # PG 18
dnf install -y ddsketch_17 # PG 17
dnf install -y ddsketch_16 # PG 16
dnf install -y ddsketch_15 # PG 15
dnf install -y ddsketch_14 # PG 14
apt install -y postgresql-18-ddsketch # PG 18
apt install -y postgresql-17-ddsketch # PG 17
apt install -y postgresql-16-ddsketch # PG 16
apt install -y postgresql-15-ddsketch # PG 15
apt install -y postgresql-14-ddsketch # PG 14
创建扩展:
CREATE EXTENSION ddsketch;
用法
实现了 DDSketch,一种完全可合并的分位数草图,提供相对误差保证。比 percentile_cont 快得多,并支持并行处理。
CREATE EXTENSION ddsketch;
直接聚合函数
| 函数 | 描述 |
|---|---|
ddsketch_percentile(value, alpha, nbuckets, quantile) | 估计单个百分位数 |
ddsketch_percentile(value, alpha, nbuckets, quantiles[]) | 估计多个百分位数 |
ddsketch_percentile_of(value, alpha, nbuckets, value) | 估计某个值的百分位排名 |
ddsketch_percentile_of(value, alpha, nbuckets, values[]) | 估计多个值的百分位排名 |
预聚合函数
| 函数 | 描述 |
|---|---|
ddsketch(value, alpha, nbuckets) | 从值构建 ddsketch |
ddsketch_percentile(sketch, quantile) | 从预构建的草图估计百分位数 |
ddsketch_percentile(sketch, quantiles[]) | 从预构建的草图估计多个百分位数 |
工具函数
| 函数 | 描述 |
|---|---|
ddsketch_count(sketch) | 返回草图中的项目数量 |
ddsketch_sum(sketch, low, high) | 指定值范围内的截断求和 |
ddsketch_avg(sketch, low, high) | 指定值范围内的截断平均值 |
参数
alpha– 控制精度和草图大小(越小越精确,但体积越大)nbuckets– 最大桶数(每个 8 字节)
示例
-- 替代:SELECT percentile_cont(0.95) WITHIN GROUP (ORDER BY a) FROM t;
SELECT ddsketch_percentile(a, 0.05, 1024, 0.95) FROM t;
-- 一次估计多个百分位数
SELECT ddsketch_percentile(a, 0.05, 1024, ARRAY[0.5, 0.95, 0.99]) FROM t;
-- 预聚合以加速重复查询
CREATE TABLE p AS SELECT a, b, ddsketch(c, 0.05, 1024) AS d FROM t GROUP BY a, b;
-- 查询预聚合数据(约 1.5ms vs 精确计算约 7s)
SELECT a, ddsketch_percentile(d, 0.95) FROM p GROUP BY a ORDER BY a;