彙總函式用於對目標數值執行計算並返回結果。本文介紹彙總函式的基本文法及樣本。
Simple Log Service支援如下彙總函式。
函數名稱 | 文法 | 說明 | 支援SQL | 支援SPL |
arbitrary(x) | 返回x中任意一個非空的值。 | √ | × | |
avg(x) | 計算x的算術平均值。 | √ | × | |
bitwise_and_agg(x) | 返回x中所有值按位與運算(AND)的結果。 | √ | × | |
bitwise_or_agg(x) | 返回x中所有值按位或運算(OR)的結果。 | √ | × | |
bool_and(boolean expression) | 判斷是否所有日誌都滿足條件。如果是,則返回true。 bool_and函數等同於every函數。 | √ | × | |
bool_or(boolean expression) | 判斷是否存在日誌滿足條件。如果存在,則返回true。 | √ | × | |
checksum(x) | 計算x的校正和。 | √ | × | |
count(*) | 統計所有的日誌條數。 | √ | × | |
count(1) | 統計所有的日誌條數,等同於count(*)。 | √ | × | |
count(x) | 統計x中值不為NULL的日誌條數。 | √ | × | |
count_if(boolean expression) | 統計滿足指定條件的日誌條數。 | √ | × | |
every(boolean expression) | 判斷是否所有日誌都滿足條件。如果是,則返回true。 every函數等同於bool_and函數。 | √ | × | |
geometric_mean(x) | 計算x的幾何平均數。 | √ | × | |
kurtosis(x) | 計算x的峰度。 | √ | × | |
map_union(x) | 返回一列Map資料的並集。 如果Map中存在相同的鍵,則返回的索引值為其中任意一個鍵的值。 | √ | × | |
max(x) | 查詢x中的最大值。 | √ | × | |
max(x, n) | 查詢x中最大的n個值。返回結果為數組。 | √ | × | |
max_by(x, y) | 查詢y為最大值時對應的x值。 | √ | × | |
max_by(x, y, n) | 查詢最大的n個y值對應的x值,返回結果為數組。 | √ | × | |
min(x) | 查詢x中最小值。 | √ | × | |
min(x, n) | 查詢x中最小的n個值。返回結果為數組。 | √ | × | |
min_by(x, y) | 查詢y為最小值時對應的x值。 | √ | × | |
min_by(x, y, n) | 查詢最小的n個y值對應的x值。返回結果為數組。 | √ | × | |
skewness(x) | 計算x的偏度。 | √ | × | |
sum(x) | 計算x的總值。 | √ | × |
arbitrary函數
arbitrary函數用於返回x中任意一個非空的值。
文法
arbitrary(x)參數說明
參數 | 說明 |
x | 參數值為任意資料類型。 |
傳回值類型
與參數值的資料類型一致。
樣本
返回request_method欄位中任意一個非空的欄位值。
查詢和分析語句(調試)
* | SELECT arbitrary(request_method) AS request_method查詢和分析結果中,request_method 列傳回值為
GET。
avg函數
avg函數用於計算x的算術平均值。
文法
avg(x)參數說明
參數 | 說明 |
x | 參數值為double、bigint、decimal或real類型。 |
傳回值類型
double類型。
樣本
返回平均延遲時間高於1000微秒的Project。
查詢和分析語句(調試)
method: PostLogstoreLogs | SELECT avg(latency) AS avg_latency, Project GROUP BY Project HAVING avg_latency > 1000查詢和分析結果返回一條記錄:avg_latency 值為
3223.4162679425835,對應的 Project 值為以datalab-14開頭的專案名稱。
bitwise_and_agg函數
bitwise_and_agg函數用於返回x中所有值按位與運算(AND)的結果。
文法
bitwise_and_agg(x)參數說明
參數 | 說明 |
x | 參數值為bigint類型。 |
傳回值類型
bigint類型(二進位形式)。
樣本
對request_time欄位的所有值進行按位與運算。
查詢和分析語句(調試)
* | SELECT bitwise_and_agg(status)查詢和分析結果為單列
_col0,傳回值為0。
bitwise_or_agg函數
bitwise_or_agg函數用於返回x中所有值按位或運算(OR)的結果。
文法
bitwise_or_agg(x)參數說明
參數 | 說明 |
x | 參數值為bigint類型。 |
傳回值類型
bigint類型(二進位形式)。
樣本
對request_time欄位的所有值進行按位或運算。
查詢和分析語句(調試)
* | SELECT bitwise_or_agg(request_length)查詢和分析結果返回結果為單列
_col0,值為16383。
bool_and函數
bool_and函數用於判斷是否所有日誌都滿足條件。如果是,則返回true。bool_and函數等同於every函數。
文法
bool_and(boolean expression)參數說明
參數 | 說明 |
boolean expression | 參數值為布林運算式。 |
傳回值類型
boolean類型。
樣本
判斷所有請求的時間是否都小於100秒。如果是,則返回true。
查詢和分析語句(調試)
* | SELECT bool_and(request_time < 100)查詢和分析結果返回結果為
true,即所有日誌的request_time值均小於100。
bool_or函數
bool_or函數用於判斷是否存在日誌滿足條件。如果存在,則返回true。
文法
bool_or(boolean expression)參數說明
參數 | 說明 |
boolean expression | 參數值為布林運算式。 |
傳回值類型
boolean類型。
樣本
判斷是否存在請求時間小於20秒的請求。如果存在,則返回true。
查詢和分析語句(調試)
* | SELECT bool_or(request_time < 20)查詢和分析結果為
_col0列返回true,表示日誌中存在 request_time 小於 20 的記錄。
checksum函數
checksum函數用於計算x的校正和。
文法
checksum(x)參數說明
參數 | 說明 |
x | 參數值為任意資料類型。 |
傳回值類型
string類型(BASE 64編碼)。
樣本
查詢和分析語句(調試)
* | SELECT checksum(request_method) AS request_method查詢和分析結果中,request_method 欄位的校正值為
NDXFdgnd8GE=。
count函數
count函數用於計數。
文法
統計所有的日誌條數。
count(*)統計所有的日誌條數。等同於
count(*)。count(1)統計x中值不為NULL的日誌條數。
count(x)
參數說明
參數 | 說明 |
x | 參數值為任意資料類型。 |
傳回值類型
integer類型。
樣本
count_if函數
count_if函數用於統計滿足指定條件的日誌條數。
文法
count_if(boolean expression)參數說明
參數 | 說明 |
boolean expression | 參數值為布林運算式。 |
傳回值類型
integer類型。
樣本
統計request_uri欄位的值是以file-0結尾的日誌條數。
查詢和分析語句(調試)
* | SELECT count_if(request_uri like '%file-0') AS count查詢和分析結果
geometric_mean函數
geometric_mean函數用於計算x的幾何平均數。
文法
geometric_mean(x)參數說明
參數 | 說明 |
x | 參數值為double、bigint或real類型。 |
傳回值類型
double類型。
樣本
統計請求時間長度的幾何平均值。
查詢和分析語句(調試)
* | SELECT geometric_mean(request_time) AS time查詢和分析結果中,time 列的值為
39.443123208882308。
every函數
every函數用於判斷是否所有日誌都滿足條件。如果是,則返回true。every函數等同於bool_and函數。
文法
every(boolean expression)參數說明
參數 | 說明 |
boolean expression | 參數值為布林運算式。 |
傳回值類型
boolean類型。
樣本
判斷所有請求的時間是否都小於100秒。如果是,則返回true。
查詢和分析語句(調試)
* | SELECT every(request_time < 100)查詢和分析結果
kurtosis函數
kurtosis函數用於計算x的峰度。
文法
kurtosis(x)參數說明
參數 | 說明 |
x | 參數值為double、bigint類型。 |
傳回值類型
double類型。
樣本
計算請求時間的峰度。
查詢和分析語句(調試)
*| SELECT kurtosis(request_time)查詢和分析結果
kurtosis -3.0006998250171186
map_union函數
map_union函數用於返回一列Map資料的並集。 如果Map中存在相同的鍵,則返回的索引值為其中任意一個鍵的值。
文法
map_union(x)參數說明
參數 | 說明 |
x | 參數值為map類型。 |
傳回值類型
map類型。
樣本
將etl_context欄位的值(map類型)彙總後,隨機返回其中一個值(map類型)。
欄位範例
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" }查詢和分析語句
* | SELECT map_union( try_cast(json_parse(etl_context) AS map(varchar, varchar)) )查詢和分析結果:執行該查詢語句後,返回結果列名為
_col0,值為 etl_context 解析後的索引值對映射,包含consumer_group、shard_id、project、logstore、consumer等欄位及其對應值。
max函數
max函數用於查詢x中最大的值。
文法
查詢x中最大的值。
max(x)查詢x中最大的n個值,返回結果為數組。
max(x, n)
參數說明
參數 | 說明 |
x | 參數值為任意資料類型。 |
n | 參數值為正整數。 |
傳回值類型
與參數值的資料類型一致。
樣本
max_by函數
max_by函數支援如下兩種用法。
文法
查詢y為最大值時對應的x值。
max_by(x, y)查詢最大的n個y值對應的x值,返回結果為數組。
max_by(x, y, n)
參數說明
參數 | 說明 |
x | 參數值為任意資料類型。 |
y | 參數值為任意資料類型。 |
n | 大於0的整數。 |
傳回值類型
與參數值的資料類型一致。
樣本
樣本1:統計最高消費訂單對應的時間點。
查詢和分析語句
* | SELECT max_by(UsageEndTime, PretaxAmount) AS time查詢和分析結果:time列傳回值為
1625731025。
樣本2:統計請求時間長度最大的3個請求對應的要求方法。
查詢和分析語句(調試)
* | SELECT max_by(request_method, request_time, 3) AS method查詢和分析結果:method 的值為
["POST","POST","POST"],表示按request_time排序最近 3 次請求的方法均為 POST。
min函數
min函數用於查詢x中最小值。
文法
查詢x中最小值。
min(x)查詢x中最小的n個值,返回結果為數組。
min(x,n)
參數說明
參數 | 說明 |
x | 參數值為任意資料類型。 |
n | 參數值為正整數。 |
傳回值類型
與參數值的資料類型一致。
樣本
min_by函數
min_by函數支援如下兩種用法。
文法
查詢y為最小值時對應的x值。
min_by(x, y)查詢最小的n個y值對應的x值。返回結果為數組。
min_by(x, y, n)
參數說明
參數 | 說明 |
x | 參數值為任意資料類型。 |
y | 參數值為任意資料類型。 |
n | 大於0的整數。 |
傳回值類型
與參數值的資料類型一致。
樣本
skewness函數
skewness函數用於計算x的偏度。
文法
skewness(x)參數說明
參數 | 說明 |
x | 參數值為double、bigint類型。 |
傳回值類型
double類型。
樣本
計算請求時間的偏度。
查詢和分析語句(調試)
*| SELECT skewness(request_time) AS skewness查詢和分析結果:skewness值為
0.00042944441602043965。
sum函數
sum函數用於計算x的總值。
文法
sum(x)參數說明
參數 | 說明 |
x | 參數值為double、bigint、decimal或real類型。 |
傳回值類型
與參數值的資料類型一致。
樣本
計算網站每天的訪問流量。
查詢和分析語句(調試)
* | SELECT date_trunc('day', __time__) AS time, sum(body_bytes_sent) AS body_bytes_sent GROUP BY time ORDER BY time查詢和分析結果:執行該查詢和分析語句後,返回按天匯總的統計結果表格,包含 2023-09-19 至 2023-09-23 共 5 天的
body_bytes_sent總和資料。