同比和環(huán)比函數(shù)
本文介紹同比和環(huán)比函數(shù)的基礎(chǔ)語法和示例。
日志服務(wù)支持如下同比和環(huán)比函數(shù)。
函數(shù)名稱 | 語法 | 說明 | 支持SQL | 支持SPL |
compare(x, n) | 對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。 | √ | × | |
compare(x, n1, n2, n3...) | 對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n1、n2、n3秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。 | √ | × | |
ts_compare(x, n) | 對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。 | √ | × | |
ts_compare(x, n1, n2, n3...) | 對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n1、n2、n3秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。 | √ | × |
使用compare函數(shù)時(shí),進(jìn)行對(duì)比的時(shí)間必須相同。
例如支持對(duì)比當(dāng)前1小時(shí)與昨天同時(shí)段的數(shù)據(jù),但不支持對(duì)比當(dāng)前1小時(shí)與上1小時(shí)的數(shù)據(jù)。
ts_compare函數(shù)必須按照時(shí)間列進(jìn)行分組(GROUP BY)。
compare函數(shù)
compare函數(shù)用于對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。
語法
對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。
compare(x, n)
對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n1、n2、n3秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。
compare(x, n1, n2, n3...)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為double類型或long類型。 |
n | 時(shí)間窗口,單位為秒。例如3600(1小時(shí))、86400(1天)、604800(1周)、31622400(1年)。 |
返回值類型
數(shù)組。格式為[當(dāng)前計(jì)算結(jié)果, n秒前的計(jì)算結(jié)果, 當(dāng)前計(jì)算結(jié)果與n秒前計(jì)算結(jié)果的比值]。
示例
示例1:計(jì)算當(dāng)前1小時(shí)和昨天同時(shí)段的網(wǎng)站訪問量比值。
選擇查詢和分析的時(shí)間范圍為1小時(shí)(整點(diǎn)時(shí)間),并執(zhí)行如下查詢和分析語句。其中86400表示當(dāng)前時(shí)間減去86400秒(1天),log表示Logstore名稱。
查詢和分析結(jié)果為數(shù)組形式
查詢和分析語句(調(diào)試)
* | SELECT compare(PV, 86400) FROM ( SELECT count(*) AS PV FROM log )
查詢和分析結(jié)果
3337.0表示當(dāng)前1小時(shí)(例如2020-12-25 14:00:00~2020-12-25 15:00:00)的網(wǎng)站訪問量。
3522.0表示昨天同時(shí)段(例如2020-12-24 14:00:00~2020-12-24 15:00:00)的網(wǎng)站訪問量。
0.947473026689381表示當(dāng)前1小時(shí)與昨天同時(shí)段的網(wǎng)站訪問量比值。
查詢和分析結(jié)果為分列顯示
查詢和分析語句(調(diào)試)
* | SELECT diff [1] AS today, diff [2] AS yesterday, diff [3] AS ratio FROM ( SELECT compare(PV, 86400) AS diff FROM ( SELECT count(*) AS PV FROM log ) )
compare函數(shù)計(jì)算結(jié)果為數(shù)組形式,其中diff為compare函數(shù)計(jì)算結(jié)果的別名,diff [1]表示獲取數(shù)組中的第一個(gè)值。
查詢和分析結(jié)果
3337.0表示當(dāng)前1小時(shí)(例如2020-12-25 14:00:00~2020-12-25 15:00:00)的網(wǎng)站訪問量。
3522.0表示昨天同時(shí)段(例如2020-12-24 14:00:00~2020-12-24 15:00:00)的網(wǎng)站訪問量。
0.947473026689381表示當(dāng)前1小時(shí)與昨天同時(shí)段的網(wǎng)站訪問量比值。
示例2:統(tǒng)計(jì)當(dāng)前1小時(shí)內(nèi)各個(gè)請(qǐng)求狀態(tài)對(duì)應(yīng)的請(qǐng)求方法,以及該請(qǐng)求狀態(tài)和請(qǐng)求方法對(duì)應(yīng)的請(qǐng)求數(shù)量和昨天同時(shí)段的對(duì)比。
選擇查詢和分析的時(shí)間范圍為1小時(shí)(整點(diǎn)時(shí)間),并執(zhí)行如下查詢和分析語句。其中3600表示當(dāng)前時(shí)間減去3600秒(1小時(shí)),log表示Logstore名稱。
查詢和分析語句(調(diào)試)
* | SELECT status, request_method, compare(PV, 3600) FROM ( SELECT status, request_method, count(*) AS PV FROM log GROUP BY status, request_method ) GROUP BY status, request_method
查詢和分析結(jié)果
ts_compare函數(shù)
ts_compare函數(shù)用于對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。
ts_compare函數(shù)必須按照時(shí)間列進(jìn)行分組(GROUP BY)。
語法
對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。
ts_compare(x, n)
對(duì)比當(dāng)前時(shí)間周期內(nèi)的計(jì)算結(jié)果與n1、n2、n3秒之前時(shí)間周期內(nèi)的計(jì)算結(jié)果。
ts_compare(x, n1, n2, n3...)
參數(shù)說明
參數(shù) | 說明 |
x | 參數(shù)值為double類型或long類型。 |
n | 時(shí)間窗口,單位為秒。例如3600(1小時(shí))、86400(1天)、604800(1周)、31622400(1年)。 |
返回值類型
數(shù)組。格式為[當(dāng)前計(jì)算結(jié)果, n秒前的計(jì)算結(jié)果, 當(dāng)前計(jì)算結(jié)果與n秒前計(jì)算結(jié)果的比值, n秒前的UNIX時(shí)間戳]。
示例
示例1:計(jì)算今天每小時(shí)的網(wǎng)站訪問量與昨天同時(shí)段、前天同時(shí)段的網(wǎng)站訪問量比值。
選擇查詢和分析的時(shí)間范圍為今天(整點(diǎn)時(shí)間),并執(zhí)行如下查詢和分析語句。其中,86400表示當(dāng)前時(shí)間減去86400秒(1天),172800表示當(dāng)前時(shí)間減去172800秒(2天), log表示Logstore名稱,date_trunc('hour',__time__ )表示使用date_trunc函數(shù)將時(shí)間對(duì)齊到小時(shí)。
查詢和分析結(jié)果為數(shù)組形式
查詢和分析語句(調(diào)試)
* | SELECT time, ts_compare(PV, 86400, 172800) as diff FROM ( SELECT count(*) as PV, date_trunc('hour', __time__) AS time FROM log GROUP BY time ) GROUP BY time ORDER BY time
查詢和分析結(jié)果
1174.0表示當(dāng)前時(shí)段(例如2022-09-22 00:00~01:00)的網(wǎng)站訪問量。
1191.0表示昨天同時(shí)段(例如2022-09-21 00:00~01:00)的網(wǎng)站訪問量。
1253.0表示前天同時(shí)段(例如2022-09-20 00:00~01:00)的網(wǎng)站訪問量。
0.9857262804366079表示當(dāng)前時(shí)段與昨天同時(shí)段的網(wǎng)站訪問量比值。
0.936951316839585表示當(dāng)前時(shí)段與前天同時(shí)段的網(wǎng)站訪問量比值。
1663689600.0表示2022-09-21 00:00的Unix時(shí)間戳。
1663603200.0表示2022-09-20 00:00的Unix時(shí)間戳。
說明查詢和分析結(jié)果的時(shí)間,以實(shí)際執(zhí)行結(jié)果為準(zhǔn)。
查詢和分析結(jié)果為分列顯示
查詢和分析語句(調(diào)試)
* | SELECT time, diff [1] AS day1, diff [2] AS day2, diff [3] AS day3, diff [4] AS ratio1, diff [5] AS ratio2 FROM ( SELECT time, ts_compare(PV, 86400, 172800) AS diff FROM ( SELECT count(*) as PV, date_trunc('hour', __time__) AS time FROM log GROUP BY time ) GROUP BY time ORDER BY time )
查詢和分析結(jié)果
示例2:環(huán)比今天每小時(shí)的網(wǎng)站訪問量。
選擇查詢和分析的時(shí)間范圍為今天(相對(duì)),并執(zhí)行如下查詢和分析語句。其中3600表示當(dāng)前時(shí)間減去3600秒(1小時(shí)), log表示Logstore名稱,date_trunc('hour',__time__ )表示使用date_trunc函數(shù)將時(shí)間對(duì)齊到小時(shí)。
查詢和分析語句(調(diào)試)
* | SELECT time, ts_compare(PV, 3600) AS data FROM( SELECT date_trunc('hour', __time__) AS time, count(*) AS PV FROM log GROUP BY time ORDER BY time ) GROUP BY time
查詢和分析結(jié)果
說明查詢和分析結(jié)果的時(shí)間,以實(shí)際執(zhí)行結(jié)果為準(zhǔn)。