本文为您可以介绍如何使用APPROX_COUNT_DISTINCT函数,提升作业性能。
使用限制
仅实时计算引擎VVR 3.0.0及以上版本支持APPROX_COUNT_DISTINCT函数。
背景信息
Count Distinct优化时,Aggregate节点的State需要保存所有Distinct Key信息。当Distinct Key数目过大时,State的读写开销太大,因此Count Distinct优化存在性能瓶颈。但在很多场景,完全精确的统计并不那么必要。如果您希望牺牲部分精确度来换取性能上的提升,您可以使用新增的内置函数APPROX_COUNT_DISTINCT提升作业性能。APPROX_COUNT_DISTINCT支持MiniBatch或Local-Global等Aggregate上的优化,但是需要注意以下几点:
输入不含有撤回消息。
Distinct Key数目需要足够大,例如UV。如果Distinct Key数目不大,APPROX_COUNT_DISTINCT性能相对精确计算提升不大。
语法
APPROX_COUNT_DISTINCT(col [, accuracy])
入参
参数 | 数据类型 | 说明 |
col | 任意类型 | 字段名称 |
accuracy | FLOAT | 可选,准确率,取值范围为(0.0, 1.0),默认值为0.99,取值越高,准确率越高,state开销越大,性能越低。 |
示例
测试数据
表 1. T1 a (VARCHAR)
b (BIGINT)
Hi
1
Hi
2
Hi
3
Hi
4
Hi
5
Hi
6
Hello
1
Hello
2
Hello
3
Hello
4
测试代码
SELECT a, APPROX_COUNT_DISTINCT(b) as b, APPROX_COUNT_DISTINCT(b, 0.9) as c FROM T1 GROUP BY a;
测试结果
a (VARCHAR)
b (BIGINT)
c (BIGINT)
Hi
6
6
Hello
4
4