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_duration 和 batch_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