本文介紹同比和環比函數的基礎文法和樣本。
Log Service支援如下同比和環比函數。
在Log Service分析語句中,表示字串的字元必須使用單引號('')包裹,無符號包裹或被雙引號("")包裹的字元表示欄位名或列名。例如:'status'表示字串status,status或"status"表示日誌欄位status。
函數名稱 | 文法 | 說明 | 支援SQL | 支援SPL |
compare(x, n) | 對比目前時間周期內的計算結果與n秒之前時間周期內的計算結果。 | √ | × | |
compare(x, n1, n2, n3...) | 對比目前時間周期內的計算結果與n1、n2、n3秒之前時間周期內的計算結果。 | √ | × | |
ts_compare(x, n) | 對比目前時間周期內的計算結果與n秒之前時間周期內的計算結果。 | √ | × | |
ts_compare(x, n1, n2, n3...) | 對比目前時間周期內的計算結果與n1、n2、n3秒之前時間周期內的計算結果。 | √ | × |
使用compare函數時,進行對比的時間必須相同。
例如支援對比當前1小時與昨天同時段的資料,但不支援對比當前1小時與上1小時的資料。
ts_compare函數必須按照時間列進行分組(GROUP BY)。
compare函數
compare函數用於對比目前時間周期內的計算結果與n秒之前時間周期內的計算結果。
文法
對比目前時間周期內的計算結果與n秒之前時間周期內的計算結果。
compare(x, n)
對比目前時間周期內的計算結果與n1、n2、n3秒之前時間周期內的計算結果。
compare(x, n1, n2, n3...)
參數說明
參數 | 說明 |
x | 參數值為double類型或long類型。 |
n | 時間視窗,單位為秒。例如3600(1小時)、86400(1天)、604800(1周)、31622400(1年)。 |
傳回值類型
數組。格式為[當前計算結果, n秒前的計算結果, 當前計算結果與n秒前計算結果的比值]。
樣本
樣本1:計算當前1小時和昨天同時段的網站訪問量比值。
選取查詢和分析的時間範圍為1小時(整點時間),並執行如下查詢和分析語句。其中86400表示目前時間減去86400秒(1天),log表示Logstore名稱。
查詢和分析結果為數組形式
查詢和分析語句(調試)
* | SELECT compare(PV, 86400) FROM ( SELECT count(*) AS PV FROM log )
查詢和分析結果
3337.0表示當前1小時(例如2020-12-25 14:00:00~2020-12-25 15:00:00)的網站訪問量。
3522.0表示昨天同時段(例如2020-12-24 14:00:00~2020-12-24 15:00:00)的網站訪問量。
0.947473026689381表示當前1小時與昨天同時段的網站訪問量比值。
查詢和分析結果為分列顯示
查詢和分析語句(調試)
* | 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 ) )
compareFunction Compute結果為數組形式,其中diff為compareFunction Compute結果的別名,diff [1]表示擷取數組中的第一個值。
查詢和分析結果
3337.0表示當前1小時(例如2020-12-25 14:00:00~2020-12-25 15:00:00)的網站訪問量。
3522.0表示昨天同時段(例如2020-12-24 14:00:00~2020-12-24 15:00:00)的網站訪問量。
0.947473026689381表示當前1小時與昨天同時段的網站訪問量比值。
樣本2:統計當前1小時內各個請求狀態對應的要求方法,以及該請求狀態和要求方法對應的請求數量和昨天同時段的對比。
選取查詢和分析的時間範圍為1小時(整點時間),並執行如下查詢和分析語句。其中3600表示目前時間減去3600秒(1小時),log表示Logstore名稱。
查詢和分析語句(調試)
* | 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
查詢和分析結果
ts_compare函數
ts_compare函數用於對比目前時間周期內的計算結果與n秒之前時間周期內的計算結果。
ts_compare函數必須按照時間列進行分組(GROUP BY)。
文法
對比目前時間周期內的計算結果與n秒之前時間周期內的計算結果。
ts_compare(x, n)
對比目前時間周期內的計算結果與n1、n2、n3秒之前時間周期內的計算結果。
ts_compare(x, n1, n2, n3...)
參數說明
參數 | 說明 |
x | 參數值為double類型或long類型。 |
n | 時間視窗,單位為秒。例如3600(1小時)、86400(1天)、604800(1周)、31622400(1年)。 |
傳回值類型
數組。格式為[當前計算結果, n秒前的計算結果, 當前計算結果與n秒前計算結果的比值, n秒前的UNIX時間戳記]。
樣本
樣本1:計算今天每小時的網站訪問量與昨天同時段、前天同時段的網站訪問量比值。
選取查詢和分析的時間範圍為今天(整點時間),並執行如下查詢和分析語句。其中,86400表示目前時間減去86400秒(1天),172800表示目前時間減去172800秒(2天), log表示Logstore名稱,date_trunc('hour',__time__ )表示使用date_trunc函數將時間對齊到小時。
查詢和分析結果為數組形式
查詢和分析語句(調試)
* | 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
查詢和分析結果
1174.0表示當前時段(例如2022-09-22 00:00~01:00)的網站訪問量。
1191.0表示昨天同時段(例如2022-09-21 00:00~01:00)的網站訪問量。
1253.0表示前天同時段(例如2022-09-20 00:00~01:00)的網站訪問量。
0.9857262804366079表示當前時段與昨天同時段的網站訪問量比值。
0.936951316839585表示當前時段與前天同時段的網站訪問量比值。
1663689600.0表示2022-09-21 00:00的Unix時間戳記。
1663603200.0表示2022-09-20 00:00的Unix時間戳記。
說明查詢和分析結果的時間,以實際執行結果為準。
查詢和分析結果為分列顯示
查詢和分析語句(調試)
* | 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 )
查詢和分析結果
樣本2:環比今天每小時的網站訪問量。
選取查詢和分析的時間範圍為今天(相對),並執行如下查詢和分析語句。其中3600表示目前時間減去3600秒(1小時), log表示Logstore名稱,date_trunc('hour',__time__ )表示使用date_trunc函數將時間對齊到小時。
查詢和分析語句(調試)
* | 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
查詢和分析結果
說明查詢和分析結果的時間,以實際執行結果為準。