DataPrime 聚合表达式

本指南提供了可用于聚合的 IBM® Cloud Logs DataPrime 表达式词汇表。

any_value

返回组中任何非空表达式值。 如果未定义 expression,则默认使用 $data 对象。

any_value(expression: any?)

如果组中的所有表达式值都为空,则返回空值。

示例:

groupby $m.severity calculate any_value($d.url)

avg

计算组内数字表达式的平均值。

avg(expression: number)

示例:

groupby $m.severity calculate avg($d.duration) as average_duration

count

计算非空表达式值。 如果未定义表达式,将计算所有行。

count(expression: any?) [into <keypath>]

可以提供别名来覆盖结果将写入的键路径。

例如,查询的以下部分

count() into $d.num_rows

将产生如下形式的一行:

{ "num_rows": 7532 }

count_if

对满足条件的记录上的非空表达式值进行计数。 如果未定义表达式,则将计算满足条件的所有记录。

count_if(condition: bool, expression: any?)

示例:

groupby $m.severity calculate count_if($d.duration > 500) as $d.high_duration_logs
groupby $m.severity calculate count_if($d.duration > 500, $d.company_id) as $d.high_duration_logs

distinct_count

计算非空的不同表达式值。

distinct_count(expression: any)

示例:

groupby $l.applicationname calculate distinct_count($d.username) as active_users

distinct_count_if

对满足条件的记录上的非空独立表达式值进行计数。

distinct_count_if(condition: bool, expression: any)

示例:

groupby $l.applicationname calculate distinct_count_if($m.severity == 'Error', $d.username) as users_with_errors

max

计算组中数字表达式的最大值。

max(expression: number | timestamp)

示例:

groupby $m.severity calculate max($d.duration)

min

计算组中数字表达式的最小值。

min(expression: number | timestamp)

示例:

groupby $m.severity calculate min($d.duration)

percentile

计算组中数值表达式的近似 n 百分位值。

percentile(percentile: number, expression: number, error_threshold: number?)

由于百分位数计算是近似计算,因此可以使用 error_threshold 参数控制精确度,该参数范围为 0 至 1(默认值为 0.01 )。 数值越小,精确度越高,但查询时间也就越长。

示例:

groupby $m.severity calculate percentile(0.99, $d.duration) as p99_latency

sample_stddev

计算组中数值表达式的样本标准偏差。

sample_stddev(expression: number)

示例:

groupby $m.severity calculate sample_stddev($d.duration)

sample_variance

计算组中数值表达式的方差。

sample_variance(expression: number)

示例:

groupby $m.severity calculate sample_variance($d.duration)

stddev

计算组中数字表达式的标准偏差。

stddev(expression: number)

示例:

groupby $m.severity calculate stddev($d.duration)

sum

计算组中数字表达式的总和。

sum(expression: number)

示例:

groupby $m.severity calculate sum($d.duration) as total_duration

variance

计算组中数值表达式的方差。

variance(expression: number)

示例:

groupby $m.severity calculate variance($d.duration)

DataPrime 聚合中的表达式

使用 groupby 操作符查询时,可以对结果桶应用聚合函数(如 asavg, max, sum )。 该功能可让您在表达式内部操作聚合表达式,从而同时计算和操作数据。

示例 1

此示例采用具有 connect_durationbatch_duration 字段的日志,并计算每个区域这些持续时间平均值之间的比率。

# Query
source logs
  | groupby region calculate avg(connect_duration) / avg(batch_duration)

示例 2

该查询计算没有 kubernetes_pod_name 的日志占日志总数的百分比。 计算按子系统进行。

# Query
source logs
| groupby $l.subsystemname calculate
  sum(if(kubernetes.pod_name != null,1,0)) / count() as pct_without_pod_name

示例 3

该查询计算每个部门最高和最低工资之间的比率,并提供 Based on N Employees 字符串作为每行的附加列。

# Query
source logs
| groupby department_id calculate
    max(salary) / min(salary) as salary_ratio
    `Based on {count()} Employees`

示例 4

该查询计算错误日志和信息日志之间的比率。

source logs
| groupby $m.timestamp / 1h as hour calculate
    count_if($m.severity == '5') / count_if($m.severity == '3') as error_to_info_ratio