全部產品
Search
文件中心

Simple Log Service:同比和環比函數

更新時間:Jun 30, 2024

本文介紹同比和環比函數的基礎文法和樣本。

Log Service支援如下同比和環比函數。

重要

在Log Service分析語句中,表示字串的字元必須使用單引號('')包裹,無符號包裹或被雙引號("")包裹的字元表示欄位名或列名。例如:'status'表示字串status,status"status"表示日誌欄位status。

函數名稱

文法

說明

支援SQL

支援SPL

compare函數

compare(x, n)

對比目前時間周期內的計算結果與n秒之前時間周期內的計算結果。

×

compare(x, n1, n2, n3...)

對比目前時間周期內的計算結果與n1、n2、n3秒之前時間周期內的計算結果。

×

ts_compare函數

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
          )
      • 查詢和分析結果PV比

        • 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
      • 查詢和分析結果每分鐘PV

        • 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
    • 查詢和分析結果ts_compare

      說明

      查詢和分析結果的時間,以實際執行結果為準。