数据仓库服务 GAUSSDB(DWS)-聚集函数:approx_count_distinct(col_name)

时间:2024-04-18 16:25:13

approx_count_distinct(col_name)

描述:使用HyperLogLog++ (HLL++) 算法进行基数(某一列去重后的行数)的估算。该函数仅8.3.0及以上集群版本支持。

入参说明:col_name指需要估算基数的列。

可通过GUC参数approx_count_distinct_precision调整误差率。

  • 参数取值范围为[10,20],默认值为17,理论误差率为千分之三。

  • 该参数表示HyperLogLog++ (HLL++)算法中分桶个数,参数越大时,分桶数则越大,理论误差率则越小。
  • 该参数取值越大,相应的计算时间和内存资源开销越大,但依然远小于精确的count distinct语句对应的开销。推荐在估算基数较大时使用该函数替换count distinct。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
CREATE TABLE employeeinfo (empno smallint, ename varchar(20), job varchar(20), hiredate date,deptno smallint) WITH (ORIENTATION = COLUMN);
INSERT INTO employeeinfo VALUES (7155, 'JACK', 'SALESMAN', '2018-12-01', 30);
INSERT INTO employeeinfo VALUES (7003, 'TOM', 'FINANCE', '2016-06-15', 20);
INSERT INTO employeeinfo VALUES (7357, 'MAX', 'SALESMAN', '2020-10-01', 30);

SELECT APPROX_COUNT_DISTINCT(empno) from employeeinfo;
 approx_count_distinct
-----------------------
                     3
(1 row)

SELECT COUNT(DISTINCT empno) FROM employeeinfo GROUP BY ename;
 count
-------
     1
     1
     1
(3 rows)
support.huaweicloud.com/sqlreference-830-dws/dws_06_0046.html