1 插件介绍、下载与安装
1.1 插件介绍
为了提供一个性能更优的解决方案,开发了一个名为count_distinct的扩展。这个扩展包含多态聚合函数,可以有效地处理固定长度的数据类型值,并且能够应对大量数据集。
具体来说,count_distinct扩展提供了以下几个函数:
1) `count_distinct(p_value anyelement)`:这是一个多态聚合函数,用于计算传入的任一元素类型中不同值的数量。这里的`anyelement`是一个伪类型,表示任何数据类型的值。
2) `array_agg_distinct(p_value anyelement)`:这个函数类似于`count_distinct`,但不是仅仅返回不同值的数量,它还会聚合这些不同值,返回一个数组。
3) `count_distinct_elements(p_value anyarray)`:这个函数接收一个数组类型的参数,计算数组中所有元素的不同值数量。
4) `array_agg_distinct_elements(p_value anyarray)`:与`count_distinct_elements`相似,此函数返回一个数组,其中包含输入数组的不同元素。
扩展到其他数据类型的处理也非常直接,只需通过引用传递即可。开发者在使用这些函数时,需要注意内存消耗问题,因为这些函数在执行过程中会将所有数据保留在内存(RAM)中。
使用限制:
1)内存消耗:
所有唯一值需驻留内存,数据量极大时可能导致 OOM。建议在内存充足的环境中启用,或结合分区表分批次处理。
2)数据类型限制:
不支持直接处理 text 或 json 等变长类型,需转换为哈希值(如 md5)后使用。
3)分布式环境兼容性:
在 Citus 等分布式 PostgreSQL 中,需结合 hll 扩展或调整 citus.count_distinct_error_rate 参数实现近似统计。
4)索引优化:
插件本身不替代索引优化。对于高频查询字段,仍需建立复合索引(如 (mining_pool, sip))以加速过滤
1.2 插件下载
https://ftp.postgresql.org/pub/repos/yum/15/redhat/rhel-7.9-x86_64/
1.3 安装插件
yum -y install count_distinct_15-3.0.1-3.rhel7.x86_64.rpm
SELECT name, default_version,installed_version FROM pg_available_extensions where name like 'count%' order by name;
CREATE EXTENSION IF NOT EXISTS count_distinct;