估算函数

最近更新时间:2024-02-29 20:25:51

我的收藏
本文介绍估算函数的基本语法及示例。
函数名称
函数语法
说明
approx_distinct 函数
approx_distinct(x)
估算 x 列的唯一值的个数。
approx_percentile函数
approx_percentile(x,percentage)
对于 x 列进行正序排序,返回大约处于 percentage 位置的值。
approx_percentile(x,array[percentage01, percentage02...])
对于 x 列进行正序排序,返回大约处于 percentage01、percentage02 位置的值。

approx_distinct 函数

approx_distinct 函数用于估算字段值中不重复值的个数,估算结果标准误差为2.3%。

语法

approx_distinct(x)

参数说明

参数
说明
x
参数值为任意数据类型。

返回值类型

bigint 类型。

示例

使用 count 函数计算 PV,使用 approx_distinct 函数估算不重复的 client_ip 字段值作为 UV。
* | SELECT count(*) AS PV, approx_distinct(ip) AS UV

approx_percentile 函数

approx_percentile 函数用于对目标字段的值进行正序排列,返回大约处于 percentage 位置的数值。采用 T-Digest 算法进行估算,误差较低,能够满足绝大多数统计分析需求,如有需要,可使用 * | select count_if(x<(select approx_percentile(x,percentage))),count(*) 分别精确统计低于 percentage 的字段值个数和总数来验证该统计误差。

语法

返回处于 percentage 位置的数值,返回结果为 double 类型。
approx_percentile(x, percentage)
返回处于 percentage01、percentage02 位置的数值,返回结果为 array 类型。
approx_percentile(x, array[percentage01,percentage02...])

参数说明

参数
说明
x
参数值为 double 类型。
percentage
百分比值,取值范围为[0,1]。

返回值类型

double 类型或 array 类型。

示例

1. resTotalTime 列进行排列后,返回大约处于50%位置的 resTotalTime 字段的值。
* | select approx_percentile(resTotalTime,0.5)
2. resTotalTime 列进行排列后,返回处于20%、40%及60%位置的 resTotalTime 字段的值。
* | select approx_percentile(resTotalTime, array[0.2,0.4,0.6])