聚合函數(shù)
聚合函數(shù)用于對目標(biāo)數(shù)值執(zhí)行計算并返回結(jié)果。本文介紹聚合函數(shù)的基本語法及示例。
日志服務(wù)支持如下聚合函數(shù)。
函數(shù)名稱 | 語法 | 說明 | 支持SQL | 支持SPL |
arbitrary(x) | 返回x中任意一個非空的值。 | √ | × | |
avg(x) | 計算x的算術(shù)平均值。 | √ | × | |
bitwise_and_agg(x) | 返回x中所有值按位與運算(AND)的結(jié)果。 | √ | × | |
bitwise_or_agg(x) | 返回x中所有值按位或運算(OR)的結(jié)果。 | √ | × | |
bool_and(boolean expression) | 判斷是否所有日志都滿足條件。如果是,則返回true。 bool_and函數(shù)等同于every函數(shù)。 | √ | × | |
bool_or(boolean expression) | 判斷是否存在日志滿足條件。如果存在,則返回true。 | √ | × | |
checksum(x) | 計算x的校驗和。 | √ | × | |
count(*) | 統(tǒng)計所有的日志條數(shù)。 | √ | × | |
count(1) | 統(tǒng)計所有的日志條數(shù),等同于count(*)。 | √ | × | |
count(x) | 統(tǒng)計x中值不為NULL的日志條數(shù)。 | √ | × | |
count_if(boolean expression) | 統(tǒng)計滿足指定條件的日志條數(shù)。 | √ | × | |
every(boolean expression) | 判斷是否所有日志都滿足條件。如果是,則返回true。 every函數(shù)等同于bool_and函數(shù)。 | √ | × | |
geometric_mean(x) | 計算x的幾何平均數(shù)。 | √ | × | |
kurtosis(x) | 計算x的峰度。 | √ | × | |
map_union(x) | 返回一列Map數(shù)據(jù)的并集。 如果Map中存在相同的鍵,則返回的鍵值為其中任意一個鍵的值。 | √ | × | |
max(x) | 查詢x中的最大值。 | √ | × | |
max(x, n) | 查詢x中最大的n個值。返回結(jié)果為數(shù)組。 | √ | × | |
max_by(x, y) | 查詢y為最大值時對應(yīng)的x值。 | √ | × | |
max_by(x, y, n) | 查詢最大的n個y值對應(yīng)的x值,返回結(jié)果為數(shù)組。 | √ | × | |
min(x) | 查詢x中最小值。 | √ | × | |
min(x, n) | 查詢x中最小的n個值。返回結(jié)果為數(shù)組。 | √ | × | |
min_by(x, y) | 查詢y為最小值時對應(yīng)的x值。 | √ | × | |
min_by(x, y, n) | 查詢最小的n個y值對應(yīng)的x值。返回結(jié)果為數(shù)組。 | √ | × | |
skewness(x) | 計算x的偏度。 | √ | × | |
sum(x) | 計算x的總值。 | √ | × |
arbitrary函數(shù)
arbitrary函數(shù)用于返回x中任意一個非空的值。
語法
arbitrary(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為任意數(shù)據(jù)類型。 |
返回值類型
與參數(shù)值的數(shù)據(jù)類型一致。
示例
返回request_method
字段中任意一個非空的字段值。
查詢和分析語句(調(diào)試)
* | SELECT arbitrary(request_method) AS request_method
查詢和分析結(jié)果
avg函數(shù)
avg函數(shù)用于計算x的算術(shù)平均值。
語法
avg(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為double、bigint、decimal或real類型。 |
返回值類型
double類型。
示例
返回平均延遲時間高于1000微秒的Project。
查詢和分析語句(調(diào)試)
method: PostLogstoreLogs | SELECT avg(latency) AS avg_latency, Project GROUP BY Project HAVING avg_latency > 1000
查詢和分析結(jié)果
bitwise_and_agg函數(shù)
bitwise_and_agg函數(shù)用于返回x中所有值按位與運算(AND)的結(jié)果。
語法
bitwise_and_agg(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為bigint類型。 |
返回值類型
bigint類型(二進(jìn)制形式)。
示例
對request_time
字段的所有值進(jìn)行按位與運算。
查詢和分析語句(調(diào)試)
* | SELECT bitwise_and_agg(status)
查詢和分析結(jié)果
bitwise_or_agg函數(shù)
bitwise_or_agg函數(shù)用于返回x中所有值按位或運算(OR)的結(jié)果。
語法
bitwise_or_agg(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為bigint類型。 |
返回值類型
bigint類型(二進(jìn)制形式)。
示例
對request_time
字段的所有值進(jìn)行按位或運算。
查詢和分析語句(調(diào)試)
* | SELECT bitwise_or_agg(request_length)
查詢和分析結(jié)果
bool_and函數(shù)
bool_and函數(shù)用于判斷是否所有日志都滿足條件。如果是,則返回true。bool_and函數(shù)等同于every函數(shù)。
語法
bool_and(boolean expression)
參數(shù)說明
參數(shù) | 說明 |
boolean expression | 參數(shù)值為布爾表達(dá)式。 |
返回值類型
boolean類型。
示例
判斷所有請求的時間是否都小于100秒。如果是,則返回true。
查詢和分析語句(調(diào)試)
* | SELECT bool_and(request_time < 100)
查詢和分析結(jié)果
bool_or函數(shù)
bool_or函數(shù)用于判斷是否存在日志滿足條件。如果存在,則返回true。
語法
bool_or(boolean expression)
參數(shù)說明
參數(shù) | 說明 |
boolean expression | 參數(shù)值為布爾表達(dá)式。 |
返回值類型
boolean類型。
示例
判斷是否存在請求時間小于20秒的請求。如果存在,則返回true。
查詢和分析語句(調(diào)試)
* | SELECT bool_or(request_time < 20)
查詢和分析結(jié)果
checksum函數(shù)
checksum函數(shù)用于計算x的校驗和。
語法
checksum(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為任意數(shù)據(jù)類型。 |
返回值類型
string類型(BASE 64編碼)。
示例
查詢和分析語句(調(diào)試)
* | SELECT checksum(request_method) AS request_method
查詢和分析結(jié)果
count函數(shù)
count函數(shù)用于計數(shù)。
語法
統(tǒng)計所有的日志條數(shù)。
count(*)
統(tǒng)計所有的日志條數(shù)。等同于
count(*)
。count(1)
統(tǒng)計x中值不為NULL的日志條數(shù)。
count(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為任意數(shù)據(jù)類型。 |
返回值類型
integer類型。
示例
count_if函數(shù)
count_if函數(shù)用于統(tǒng)計滿足指定條件的日志條數(shù)。
語法
count_if(boolean expression)
參數(shù)說明
參數(shù) | 說明 |
boolean expression | 參數(shù)值為布爾表達(dá)式。 |
返回值類型
integer類型。
示例
統(tǒng)計request_uri
字段的值是以file-0
結(jié)尾的日志條數(shù)。
查詢和分析語句(調(diào)試)
* | SELECT count_if(request_uri like '%file-0') AS count
查詢和分析結(jié)果
geometric_mean函數(shù)
geometric_mean函數(shù)用于計算x的幾何平均數(shù)。
語法
geometric_mean(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為double、bigint或real類型。 |
返回值類型
double類型。
示例
統(tǒng)計請求時長的幾何平均值。
查詢和分析語句(調(diào)試)
* | SELECT geometric_mean(request_time) AS time
查詢和分析結(jié)果
every函數(shù)
every函數(shù)用于判斷是否所有日志都滿足條件。如果是,則返回true。every函數(shù)等同于bool_and函數(shù)。
語法
every(boolean expression)
參數(shù)說明
參數(shù) | 說明 |
boolean expression | 參數(shù)值為布爾表達(dá)式。 |
返回值類型
boolean類型。
示例
判斷所有請求的時間是否都小于100秒。如果是,則返回true。
查詢和分析語句(調(diào)試)
* | SELECT every(request_time < 100)
查詢和分析結(jié)果
kurtosis函數(shù)
kurtosis函數(shù)用于計算x的峰度。
語法
kurtosis(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為double、bigint類型。 |
返回值類型
double類型。
示例
計算請求時間的峰度。
查詢和分析語句(調(diào)試)
*| SELECT kurtosis(request_time)
查詢和分析結(jié)果
map_union函數(shù)
map_union函數(shù)用于返回一列Map數(shù)據(jù)的并集。 如果Map中存在相同的鍵,則返回的鍵值為其中任意一個鍵的值。
語法
map_union(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為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)) )
查詢和分析結(jié)果
max函數(shù)
max函數(shù)用于查詢x中最大的值。
語法
查詢x中最大的值。
max(x)
查詢x中最大的n個值,返回結(jié)果為數(shù)組。
max(x, n)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為任意數(shù)據(jù)類型。 |
n | 參數(shù)值為正整數(shù)。 |
返回值類型
與參數(shù)值的數(shù)據(jù)類型一致。
示例
max_by函數(shù)
max_by函數(shù)支持如下兩種用法。
語法
查詢y為最大值時對應(yīng)的x值。
max_by(x, y)
查詢最大的n個y值對應(yīng)的x值,返回結(jié)果為數(shù)組。
max_by(x, y, n)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為任意數(shù)據(jù)類型。 |
y | 參數(shù)值為任意數(shù)據(jù)類型。 |
n | 大于0的整數(shù)。 |
返回值類型
與參數(shù)值的數(shù)據(jù)類型一致。
示例
示例1:統(tǒng)計最高消費訂單對應(yīng)的時間點。
查詢和分析語句
* | SELECT max_by(UsageEndTime, PretaxAmount) AS time
查詢和分析結(jié)果
示例2:統(tǒng)計請求時長最大的3個請求對應(yīng)的請求方法。
查詢和分析語句(調(diào)試)
* | SELECT max_by(request_method, request_time, 3) AS method
查詢和分析結(jié)果
min函數(shù)
min函數(shù)用于查詢x中最小值。
語法
查詢x中最小值。
min(x)
查詢x中最小的n個值,返回結(jié)果為數(shù)組。
min(x,n)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為任意數(shù)據(jù)類型。 |
n | 參數(shù)值為正整數(shù)。 |
返回值類型
與參數(shù)值的數(shù)據(jù)類型一致。
示例
min_by函數(shù)
min_by函數(shù)支持如下兩種用法。
語法
查詢y為最小值時對應(yīng)的x值。
min_by(x, y)
查詢最小的n個y值對應(yīng)的x值。返回結(jié)果為數(shù)組。
min_by(x, y, n)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為任意數(shù)據(jù)類型。 |
y | 參數(shù)值為任意數(shù)據(jù)類型。 |
n | 大于0的整數(shù)。 |
返回值類型
與參數(shù)值的數(shù)據(jù)類型一致。
示例
skewness函數(shù)
skewness函數(shù)用于計算x的偏度。
語法
skewness(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為double、bigint類型。 |
返回值類型
double類型。
示例
計算請求時間的偏度。
查詢和分析語句(調(diào)試)
*| SELECT skewness(request_time) AS skewness
查詢和分析結(jié)果
sum函數(shù)
sum函數(shù)用于計算x的總值。
語法
sum(x)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為double、bigint、decimal或real類型。 |
返回值類型
與參數(shù)值的數(shù)據(jù)類型一致。
示例
計算網(wǎng)站每天的訪問流量。
查詢和分析語句(調(diào)試)
* | SELECT date_trunc('day', __time__) AS time, sum(body_bytes_sent) AS body_bytes_sent GROUP BY time ORDER BY time
查詢和分析結(jié)果