彙總函式用於對目標數值執行計算並返回結果。本文介紹彙總函式的基本文法及樣本。
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
查詢和分析結果
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
查詢和分析結果
bitwise_and_agg函數
bitwise_and_agg函數用於返回x中所有值按位與運算(AND)的結果。
文法
bitwise_and_agg(x)
參數說明
參數 | 說明 |
x | 參數值為bigint類型。 |
傳回值類型
bigint類型(二進位形式)。
樣本
對request_time
欄位的所有值進行按位與運算。
查詢和分析語句(調試)
* | SELECT bitwise_and_agg(status)
查詢和分析結果
bitwise_or_agg函數
bitwise_or_agg函數用於返回x中所有值按位或運算(OR)的結果。
文法
bitwise_or_agg(x)
參數說明
參數 | 說明 |
x | 參數值為bigint類型。 |
傳回值類型
bigint類型(二進位形式)。
樣本
對request_time
欄位的所有值進行按位或運算。
查詢和分析語句(調試)
* | SELECT bitwise_or_agg(request_length)
查詢和分析結果
bool_and函數
bool_and函數用於判斷是否所有日誌都滿足條件。如果是,則返回true。bool_and函數等同於every函數。
文法
bool_and(boolean expression)
參數說明
參數 | 說明 |
boolean expression | 參數值為布林運算式。 |
傳回值類型
boolean類型。
樣本
判斷所有請求的時間是否都小於100秒。如果是,則返回true。
查詢和分析語句(調試)
* | SELECT bool_and(request_time < 100)
查詢和分析結果
bool_or函數
bool_or函數用於判斷是否存在日誌滿足條件。如果存在,則返回true。
文法
bool_or(boolean expression)
參數說明
參數 | 說明 |
boolean expression | 參數值為布林運算式。 |
傳回值類型
boolean類型。
樣本
判斷是否存在請求時間小於20秒的請求。如果存在,則返回true。
查詢和分析語句(調試)
* | SELECT bool_or(request_time < 20)
查詢和分析結果
checksum函數
checksum函數用於計算x的校正和。
文法
checksum(x)
參數說明
參數 | 說明 |
x | 參數值為任意資料類型。 |
傳回值類型
string類型(BASE 64編碼)。
樣本
查詢和分析語句(調試)
* | SELECT checksum(request_method) AS request_method
查詢和分析結果
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
查詢和分析結果
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)
查詢和分析結果
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)) )
查詢和分析結果
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
查詢和分析結果
樣本2:統計請求時間長度最大的3個請求對應的要求方法。
查詢和分析語句(調試)
* | SELECT max_by(request_method, request_time, 3) AS method
查詢和分析結果
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
查詢和分析結果
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
查詢和分析結果