本文介绍日志服务支持的聚合函数语法及常见场景的使用示例。
说明
在日志服务分析语句(SQL 语句)中,需要使用单引号('')包裹代表字符串的字符,无符号包裹或被双引号("")包裹的字符为字段名或列名。例如'time'
代表字符串,time
或 "time"
代表字段名或列名。
函数名称 | 函数语法 | 说明 |
---|---|---|
ARBITRARY(KEY) | 返回一组值中任意一个非空的值。 | |
AVG(KEY) | 计算一组值的算数平均值。 | |
BITWISE_AND_AGG(KEY) | 计算一组值中所有值按位与运算(AND)的结果。 | |
BITWISE_OR_AGG(KEY) | 计算一组值中所有值按位或运算(OR)的结果。 | |
BOOL_ADD(boolean_expression) | 判断是否所有值都满足指定的布尔表达式。 | |
BOOL_OR(boolean_expression) | 判断是否存在值满足指定的布尔表达式。 | |
CHECKSUM(KEY) | 计算一组值的校验和。 | |
COUNT(*) | 计算一组值的数量。 | |
COUNT(1) | 计算一组值的数量,等同于 COUNT(*)。 | |
COUNT(KEY) | 计算一组值中不为 NULL 的值的数量。 | |
COUNT_IF (Boolean Expression) | 计算一组值中满足指定条件的值的数量。 | |
EVERY(boolean_expression) | 判断是否所有值都满足指定的布尔表达式。 | |
GEOMETRIC_MEAN(KEY) | 计算一组值的几何平均数。 | |
KURTOSIS(KEY) | 计算一组值的峰值。 | |
MAP_UNION(KEY) | 合并多组 Map 数据。如果多组 Map 中存在重复的键,只返回该键的任意一个值。 | |
MAX(KEY) | 查询一组值中的最大值。 | |
MAX_BY(KEY1, KEY2) | 查询与 | |
MAX_BY(KEY1, KEY2, n) | 查询与TOP N 个 | |
MIN(KEY) | 查询一组值中的最小值。 | |
SUM(KEY) | 计算一组值的总和。 |
ARBITRARY 函数用于返回一组值中任意一个非空的值。
语法格式
ARBITRARY(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为任意数据类型。 |
返回值说明
返回值与参数值的数据类型一致。
场景
获取 ReqTime
字段中任意一个非空的值。
日志样例
检索和分析语句
* | SELECT ARBITRARY(ReqTime) AS ReqTime
检索和分析结果
AVG 函数用于计算一组值的算数平均值。
语法格式
AVG(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Double、Bigint、Decimal 或 Real 数据类型。 |
返回值说明
返回值为 Double 类型。
场景
计算平均请求时间。
日志样例
检索和分析语句
* | SELECT AVG(ReqTime)
检索和分析结果
BITWISE_AND_AGG 函数用于计算一组值中所有值按位与运算(AND)的结果。
语法格式
BITWISE_AND_AGG(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为 Bigint 数据类型。 |
返回值说明
返回值为 Bigint 类型(二进制形式)。
场景
对 status
列的所有值进行按位与运算。
日志样例
检索和分析语句
* | SELECT BITWISE_AND_AGG(status)
检索和分析结果
BITWISE_OR_AGG 函数用于计算一组值中所有值按位或运算(OR)的结果。
语法格式
BITWISE_OR_AGG(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为 Bigint 数据类型。 |
返回值说明
返回值为 Bigint 类型(二进制形式)。
场景
对 status
列的所有值进行按位或运算。
日志样例
检索和分析语句
* | SELECT BITWISE_OR_AGG(status)
检索和分析结果
BOOL_ADD 函数用于判断是否所有值都满足指定的布尔表达式。
语法格式
BOOL_ADD(boolean_expression)
参数说明
参数 | 说明 |
---|---|
boolean_expression | 布尔表达式。 |
返回值说明
返回值为 Boolean 类型。
场景
判断 status
字段值是否都为 200。如果不是,则返回 false。
日志样例
检索和分析语句
* | SELECT BOOL_AND(status = 200)
检索和分析结果
BOOL_OR 函数用于判断是否存在值满足指定的布尔表达式。
语法格式
BOOL_OR(boolean_expression)
参数说明
参数 | 说明 |
---|---|
boolean_expression | 布尔表达式。 |
返回值说明
返回值为 Boolean 类型。
场景
判断是否存在小于 20 的 RespSize
字段值。如果是,则返回 true。
日志样例
检索和分析语句
* | SELECT BOOL_AND(RespSize < 20)
检索和分析结果
CHECKSUM 函数用于计算一组值的校验和。
语法格式
CHECKSUM(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为任意数据类型。 |
返回值说明
返回值为 String 类型(BASE64 编码)。
场景
计算 url_test
字段值的校验和。
日志样例
检索和分析语句
* | SELECT CHECKSUM(url_test) AS request_method
检索和分析结果
COUNT 函数用于计算一组值的数量。
语法格式
计算一组值的数量。
COUNT(*)
计算一组值的数量,等同于COUNT(*)。
COUNT(1)
计算一组值中不为 NULL 的值的数量。
COUNT(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为任意数据类型。 |
返回值说明
返回值为 Integer 类型。
场景
计算请求时间大于 40.0 豪秒的请求个数。
日志样例
检索和分析语句
* | SELECT COUNT(ReqTime) WHERE ReqTime > 40.0
检索和分析结果
COUNT_IF 函数用于计算一组值中满足指定条件的值的数量。
语法格式
COUNT_IF (Boolean Expression)
参数说明
参数 | 说明 |
---|---|
Boolean Expression | 布尔表达式。 |
返回值说明
返回值类型为 Integer 类型。
场景
统计 url_test
字段值是以 name=xxx
结尾的日志条数。
日志样例
检索和分析语句
* | SELECT COUNT_IF(url_test LIKE '%name=xxx') AS count
检索和分析结果
EVERY 函数用于判断是否所有值都满足指定的布尔表达式,等同于BOOL_ADD 函数。
语法格式
EVERY(boolean_expression)
参数说明
参数 | 说明 |
---|---|
boolean_expression | 布尔表达式。 |
返回值说明
返回值为 Boolean 类型。
场景
判断 status
字段值是否都为 200。如果不是,则返回 false。
日志样例
检索和分析语句
* | SELECT EVERY(status = 200)
检索和分析结果
GEOMETRIC_MEAN 函数用于计算一组值的几何平均数。
语法格式
GEOMETRIC_MEAN(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为 Double、Bigint 或 Real 数据类型。 |
返回值说明
返回值为 Double 类型。
场景
计算 status
字段值的几何平均数。
日志样例
检索和分析语句
* | SELECT GEOMETRIC_MEAN(status)
检索和分析结果
KURTOSIS 函数用于计算一组值的峰度。
语法格式
KURTOSIS(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为 Double、Bigint 数据类型。 |
返回值说明
返回值为 Double 类型。
场景
计算 status
字段值的峰度。
日志样例
检索和分析语句
* | SELECT KURTOSIS(status)
检索和分析结果
MAP_UNION 函数用于合并多组 Map 数据。如果多组 Map 中存在重复的键,只返回该键的任意一个值。
语法格式
MAP_UNION(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 字段、表达式,其值为 Map 类型。 |
返回值说明
返回值为 Map 类型。
场景
合并 result
字段的各个值,然后随机返回其中一个合并值。
日志样例
result: { type:"pattern-discovery" stage:"pattern-clustering" progress:"100" complete:"false" }
检索和分析语句
说明
本示例中的 result
字段的索引数据类型需为 text,如果索引数据类型为 json,执行如下语句将报错。
* | SELECT MAP_UNION( TRY_CAST(JSON_PARSE(result) AS map(varchar, varchar)) )
检索和分析结果
MAX 函数用于查询一组值中的最大值。
语法格式
MAX(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为任意数据类型。 |
返回值说明
返回值与参数值的数据类型一致。
场景
查询请求时间的最大值。
日志样例
检索和分析语句
* | SELECT MAX(ReqTime) AS max_reqtime
检索和分析结果
MAX_BY 函数用于查询与 KEY2
最大值或 TOP N 个 KEY2
值关联的KEY1
值。
语法格式
查询与 KEY2
最大值关联的 KEY1
值。
MAX_BY(KEY1, KEY2)
查询与TOP N 个 KEY2
值关联的 KEY1
值,返回结果为数组形式。
MAX_BY(KEY1, KEY2, n)
参数说明
参数 | 说明 |
---|---|
KEY1 | 日志字段,表达式,其值为任意数据类型。 |
KEY2 | 日志字段,表达式,其值为任意数据类型。 |
n | 大于 0 的整数,用于指定TOP N 个 |
返回值说明
返回值与参数值的数据类型一致。
场景
查询最大的请求时间以及该时间对应的请求 ID。
检索和分析语句
* | SELECT MAX(ReqTime) AS ReqTime, MAX_BY(ReqID, ReqTime) AS ReqID
检索和分析结果
场景
查询 TOP 10 请求时间对应的请求 ID。
检索和分析语句
* | SELECT MAX_BY(ReqID, ReqTime, 10) AS ReqID
检索和分析结果
MIN 函数用于查询一组值中的最小值。
语法格式
MIN(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为任意数据类型。 |
返回值说明
返回值与参数值的数据类型一致。
场景
查询请求时间的最小值。
日志样例
检索和分析语句
* | SELECT MIN(ReqTime) AS min_reqtime
检索和分析结果
SUM 函数用于计算一组值的总和。
语法格式
SUM(KEY)
参数说明
参数 | 说明 |
---|---|
KEY | 日志字段、表达式,其值为 Double、Bigint、Decimal 或 Real 数据类型。 |
返回值说明
返回值与参数值的数据类型一致。
场景
计算总请求时间。
日志样例
检索和分析语句
* | SELECT SUM(ReqTime) AS total
检索和分析结果