DataPrime 聚合表達式

本指南提供 IBM® Cloud Logs DataPrime 表達式的詞彙表,您可以使用這些表達式進行聚合。

any_value

回傳群組中任何非空的表達值。 如果沒有定義 expression,則預設為 $data 物件。

any_value(expression: any?)

如果組中的所有表達式值都為空,則返回 null。

範例:

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

avg

計算群組中數字表達式的平均值。

avg(expression: number)

範例:

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

count

計數非空的表達值。 如果未定義 expression,則會計算所有資料。

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

可以提供別名來覆寫結果要寫入的 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