Skip to content

介绍

聚合函数用于对目标数值执行计算并返回结果。本文介绍聚合函数的基本语法及示例。

函数列表

日志服务支持如下聚合函数。

在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status或"status"表示日志字段status。

函数名称语法说明
arbitrary函数arbitrary( x )返回 x 中任意一个非空的值。
avg函数avg( x )计算 x 的算术平均值。
bitwise_and_agg函数bitwise_and_agg( x )返回 x 中所有值按位与运算(AND)的结果。
bitwise_or_agg函数bitwise_or_agg( x )返回 x 中所有值按位或运算(OR)的结果。
bool_and函数bool_and( boolean expression )判断是否所有日志都满足条件。如果是,则返回true。 bool_and函数等同于every函数。
bool_or函数bool_or( boolean expression )判断是否存在日志满足条件。如果存在,则返回true。
checksum函数checksum( x )计算 x 的校验和。
count函数count(*)统计所有的日志条数。
count函数count(1)统计所有的日志条数,等同于count(*)。
count函数count( x )统计 x 中值不为NULL的日志条数。
count_if函数count_if( boolean expression )统计满足指定条件的日志条数。
every函数every( boolean expression )判断是否所有日志都满足条件。如果是,则返回true。 every函数等同于bool_and函数。
geometric_mean函数geometric_mean( x )计算 x 的几何平均数。
kurtosis函数kurtosis( x )计算 x 的峰度。
map_union函数map_union( x )返回一列Map数据的并集。 如果Map中存在相同的键,则返回的键值为其中任意一个键的值。
max函数max( x )查询 x 中的最大值。
max函数max( x , n )查询 x 中最大的 n 个值。返回结果为数组。
max_by函数max_by( x , y )查询 y 为最大值时对应的 x 值。
max_by函数max_by( x , y , n )查询最大的 n 个 y 值对应的 x 值,返回结果为数组。
min函数min( x )查询 x 中最小值。
min函数min( x , n )查询 x 中最小的 n 个值。返回结果为数组。
min_by函数min_by( x , y )查询 y 为最小值时对应的 x 值。
min_by函数min_by( x , y , n )查询最小的 n 个 y 值对应的 x 值。返回结果为数组。
skewness函数skewness( x )计算 x 的偏度。
sum函数sum( x )计算 x 的总值。

案例

arbitrary函数

arbitrary函数用于返回 x 中任意一个非空的值。

sql
arbitrary(x)
参数说明
x参数值为任意数据类型。
返回值类型说明
与参数值的数据类型一致

示例:返回request_method字段中任意一个非空的字段值。 查询和分析语句:

sql
* | SELECT arbitrary(request_method) AS request_method

查询和分析结果: image.png

avg函数

avg函数用于计算 x 的算术平均值。

sql
avg(x)
参数说明
x参数值为double、bigint、decimal或real类型。
返回值类型说明
double类型

示例:返回平均延迟时间高于1000微秒的Project。 查询和分析语句:

sql
method: PostLogstoreLogs | SELECT avg(latency) AS avg_latency, Project GROUP BY Project HAVING avg_latency > 1000

查询和分析结果: image.png

bitwise_and_agg函数

bitwise_and_agg函数用于返回 x 中所有值按位与运算(AND)的结果。

sql
bitwise_and_agg(x)
参数说明
x参数值为bigint类型。
返回值类型说明
bigint类型(二进制形式)

示例:对request_time字段的所有值进行按位与运算。 查询和分析语句:

sql
* | SELECT bitwise_and_agg(status)

查询和分析结果: image.png

bitwise_or_agg函数

bitwise_or_agg函数用于返回 x 中所有值按位或运算(OR)的结果。

sql
bitwise_or_agg(x)
参数说明
x参数值为bigint类型。
返回值类型说明
bigint类型(二进制形式)

示例:对request_time字段的所有值进行按位或运算。 查询和分析语句:

sql
* | SELECT bitwise_or_agg(request_length)

查询和分析结果: image.png

bool_and函数

bool_and函数用于判断是否所有日志都满足条件。如果是,则返回true。bool_and函数等同于every函数。

sql
bool_and(boolean expression)
参数说明
boolean expression参数值为布尔表达式。
返回值类型说明
boolean类型

示例:判断所有请求的时间是否都小于100秒。如果是,则返回true。 查询和分析语句:

sql
* | SELECT bool_and(request_time < 100)

查询和分析结果: image.png

bool_or函数

bool_or函数用于判断是否存在日志满足条件。如果存在,则返回true。

sql
bool_or(boolean expression)
参数说明
boolean expression参数值为布尔表达式。
返回值类型说明
boolean类型

示例:判断是否存在请求时间小于20秒的请求。如果存在,则返回true。 查询和分析语句:

sql
* | SELECT bool_or(request_time < 100)

查询和分析结果: image.png

checksum函数

checksum函数用于计算 x 的校验和。

sql
checksum(x)
参数说明
x参数值为任意数据类型。
返回值类型说明
string类型(BASE 64编码)

示例:判断是否存在请求时间小于20秒的请求。如果存在,则返回true。 查询和分析语句:

sql
* | SELECT checksum(request_method) AS request_method

查询和分析结果: image.png

count函数

count函数用于计数。

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

示例:统计所有的日志条数。

sql
count(*)

示例:统计所有的日志条数。等同于count(*)。

sql
count(1)

示例:统计 x 中值不为NULL的日志条数。

sql
count(x)

示例1:统计网站访问量。 查询和分析语句:

sql
* | SELECT count(*) AS PV

查询和分析结果: image.png 示例2:统计包含request_method字段且字段值不为NULL的日志条数。 查询和分析语句:

sql
* | SELECT count(request_method) AS count

查询和分析结果: image.png

count_if函数

count_if函数用于统计满足指定条件的日志条数。

sql
count_if(boolean expression)
参数说明
boolean expression参数值为布尔表达式。
返回值类型说明
integer类型

示例:统计request_uri字段的值是以file-0结尾的日志条数。 查询和分析语句:

sql
* | SELECT count_if(request_uri like '%file-0') AS count

查询和分析结果: image.png

geometric_mean函数

geometric_mean函数用于计算 x 的几何平均数。

sql
geometric_mean(x)
参数说明
x参数值为double、bigint或real类型。
返回值类型说明
double类型

示例:统计请求时长的几何平均值。 查询和分析语句:

sql
* | SELECT geometric_mean(request_time) AS time

查询和分析结果: image.png

every函数

every函数用于判断是否所有日志都满足条件。如果是,则返回true。every函数等同于bool_and函数。

sql
every(boolean expression)
参数说明
boolean expression参数值为布尔表达式。
返回值类型说明
boolean类型

示例:判断所有请求的时间是否都小于100秒。如果是,则返回true。 查询和分析语句:

sql
* | SELECT every(request_time < 100)

查询和分析结果: image.png

kurtosis函数

kurtosis函数用于计算 x 的峰度。

sql
kurtosis(x)
参数说明
x参数值为double、bigint类型。
返回值类型说明
double类型

示例:计算请求时间的峰度。 查询和分析语句:

sql
*| SELECT kurtosis(request_time)

查询和分析结果: image.png

map_union函数

map_union函数用于返回一列Map数据的并集。 如果Map中存在相同的键,则返回的键值为其中任意一个键的值。

sql
map_union(x)
参数说明
x参数值为map类型。
返回值类型说明
map类型

示例:将etl_context字段的值(map类型)聚合后,随机返回其中一个值(map类型)。 字段样例:

sql
etl_context: {
project:"datalab-148****6461-cn-chengdu"
logstore:"internal-etl-log"
consumer_group:"etl-83****4d1965"
consumer:"etl-b2d40ed****c8d6-291294"
shard_id:"0" }

查询和分析语句:

sql
* | SELECT map_union(try_cast(json_parse(etl_context) AS map(varchar,varchar)))

查询和分析结果: image.png

max函数

max函数用于查询 x 中最大的值。

  • 查询 x 中最大的值。
sql
max(x)
  • 查询 x 中最大的 n 个值,返回结果为数组。
sql
max(x, n)
参数说明
x参数值为任意数据类型。
n参数值为正整数。
返回值类型说明
与参数值的数据类型一致

示例1:查询请求时长的最大值。 查询和分析语句:

sql
* | SELECT max(request_time) AS max_request_time

查询和分析结果: image.png 示例2:查询请求时长的top 10。 查询和分析语句:

sql
* | SELECT max(request_time,10) AS "top 10"

查询和分析结果: image.png

max_by函数

max_by函数支持如下两种用法。

  • 查询 y 为最大值时对应的 x 值。
sql
max_by(x, y)
  • 查询最大的 n 个 y 值对应的 x 值,返回结果为数组。
sql
max_by(x, y, n)
参数说明
x参数值为任意数据类型。
y参数值为任意数据类型。
n大于0的整数。
返回值类型说明
与参数值的数据类型一致

示例1:统计最高消费订单对应的时间点。 查询和分析语句:

sql
* | SELECT max_by(UsageEndTime, PretaxAmount) as time

查询和分析结果: image.png 示例2:统计请求时长最大的3个请求对应的请求方法。 查询和分析语句:

sql
* | SELECT max_by(request_method,request_time,3) AS method

查询和分析结果: image.png

min函数

min函数用于查询 x 中最小值。

  • 查询 x 中最小值。
sql
min(x)
  • 查询 x 中最小的 n 个值,返回结果为数组。
sql
min(x,n)
参数说明
x参数值为任意数据类型。
n参数值为正整数。
返回值类型说明
与参数值的数据类型一致

示例1:查询请求时长的最小值。 查询和分析语句:

sql
* | SELECT min(request_time) AS min_request_time

查询和分析结果: image.png 示例2:查询请求时长最小的10个值。 查询和分析语句:

sql
* | SELECT min(request_time,10)

查询和分析结果: image.png

min_by函数

min_by函数支持如下两种用法。

  • 查询 y 为最小值时对应的 x 值。
sql
min_by(x, y)
  • 查询最小的 n 个 y 值对应的 x 值。返回结果为数组。
sql
min_by(x, y, n)
参数说明
x参数值为任意数据类型。
y参数值为任意数据类型。
n大于0的整数。
返回值类型说明
与参数值的数据类型一致

示例1:返回最小请求时长的请求对应的请求方法。 查询和分析语句:

sql
* | SELECT min_by(request_method,request_time) AS method

查询和分析结果: image.png 示例2:返回请求时长最小的3个请求对应的请求方法。 查询和分析语句:

sql
* | SELECT min_by(request_method,request_time,3) AS method

查询和分析结果: image.png

skewness函数

skewness函数用于计算 x 的偏度。

sql
skewness(x)
参数说明
x参数值为double、bigint类型。
返回值类型说明
double类型

示例:计算请求时间的偏度。 查询和分析语句:

sql
* | SELECT skewness(request_time) AS skewness

查询和分析结果: image.png

sum函数

sum函数用于计算 x 的总值。

sql
sum(x)
参数说明
x参数值为double、bigint、decimal或real类型。
返回值类型说明
与参数值的数据类型一致

示例:计算网站每天的访问流量。 查询和分析语句:

sql
* | SELECT date_trunc('day',__time__) AS time, sum(body_bytes_sent) AS body_bytes_sent GROUP BY time ORDER BY time

查询和分析结果: image.png