HyperLogLog函数为近似聚合函数,类似于approx_distinct函数。当计算的数据量非常大时,使用HyperLogLog函数可快速返回估算结果。本文介绍HyperLogLog函数的基本语法以及示例。
日志服务支持如下HyperLogLog函数。
函数名称 | 语法 | 说明 | 支持SQL | 支持SPL |
approx_set(x) | 估算x中不重复值的个数,最大标准误差默认为0.01625。 | √ | × | |
cardinality(x) | 将HyperLogLog类型的内容转换为bigint类型。 | √ | × | |
empty_approx_set() | 返回一个HyperLogLog类型的空值。最大标准误差默认为0.01625。 | √ | × | |
merge(x) | 聚合计算所有的HyperLogLog值。 | √ | × |
approx_set函数
approx_set函数用于估算x中不重复值的个数,最大标准误差默认为0.01625。
语法
approx_set(x)
参数说明
参数 | 说明 |
x | 参数值为任意数据类型。 |
返回值类型
HyperLogLog类型。
示例
使用approx_set函数估算每分钟的网站访问UV,返回结果为HyperLogLog编码格式。
查询和分析语句
* | SELECT date_trunc('minute', __time__) AS Time, approx_set(client_ip) AS UV FROM website_log GROUP BY Time ORDER BY Time
查询和分析结果
cardinality函数
cardinality函数用于将HyperLogLog类型的内容转换为bigint类型。
语法
cardinality(x)
参数说明
参数 | 说明 |
x | 参数值为HyperLogLog类型。 |
返回值类型
bigint类型。
示例
使用approx_set函数估算每分钟的网站访问UV,返回结果为HyperLogLog类型。然后使用cardinality函数将HyperLogLog类型转换为bigint类型。
查询和分析语句
* | SELECT Time, cardinality(UV) AS UV FROM ( SELECT date_trunc('minute', __time__) AS Time, approx_set(client_ip) AS UV FROM website_log GROUP BY Time ORDER BY Time ) AS UV
查询和分析结果
empty_approx_set函数
empty_approx_set函数用于返回一个HyperLogLog类型的空值。最大标准误差默认为0.01625。
语法
empty_approx_set()
返回值类型
HyperLogLog类型。
示例
返回一个HyperLogLog类型的空值。
查询和分析语句
* | SELECT empty_approx_set()
查询和分析结果
merge函数
merge函数用于聚合计算所有的HyperLogLog值。
语法
merge(x)
参数说明
参数 | 说明 |
x | 参数值为HyperLogLog类型。 |
返回值类型
HyperLogLog类型。
示例
使用approx_set函数估算每分钟的网站访问UV,使用merge函数聚合计算15分钟内所有的UV,然后使用cardinality函数将HyperLogLog类型转换为bigint类型。
查询和分析语句
* | SELECT Time, cardinality(UV) AS UV, cardinality(merge(UV) over()) AS Total_UV FROM ( SELECT date_trunc('minute', __time__) AS Time, approx_set(client_ip) AS UV FROM log GROUP BY Time ORDER BY Time )
查询和分析结果