本文介绍同比和环比函数的基础语法和示例。

注意 在日志服务分析语句中,表示字符串的字符必须使用单引号('')包裹,无符号包裹或被双引号("")包裹的字符表示字段名或列名。例如:'status'表示字符串status,status"status"表示日志字段status。
函数名称 语法 说明
compare函数 compare(x, n) 对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。
compare(x, n1, n2, n3...) 对比当前时间周期内的计算结果与n1、n2、n3秒之前时间周期内的计算结果。
ts_compare函数 ts_compare(x, n) 对比当前时间周期内的计算结果与n秒之前时间周期内的计算结果。
注意 ts_compare函数必须按照时间列进行分组(GROUP BY)。
ts_compare(x, n1, n2, n3...) 对比当前时间周期内的计算结果与n1、n2、n3秒之前时间周期内的计算结果。
注意 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年)。

返回值类型

JSON数组。格式为[当前计算结果, n秒前的计算结果, 当前计算结果与n秒前计算结果的比值, n秒前的UNIX时间戳]。

示例

  • 示例1:计算当前1小时和昨天同时段的网站访问量比值。

    选择查询和分析的时间范围为1小时(整点时间),并执行如下查询和分析语句。其中86400表示当前时间减去86400秒(1天),log表示Logstore名称。

    • 查询和分析结果为JSON数组形式
      • 查询和分析语句
        * |
        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
              )
          )
      • 查询和分析结果同比结果
        • 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:计算今天每小时的网站访问量与昨天同时段、前天同时段的网站访问量比值。

    选择查询和分析的时间范围为今天(整点时间),并执行如下查询和分析语句。其中,86400表示当前时间减去86400秒(1天),172800表示当前时间减去172800秒(2天), log表示Logstore名称,date_format(from_unixtime(__time__), '%H:00')表示返回的时间格式。

    • 查询和分析结果为JSON数组形式
      • 查询和分析语句
        * |
        SELECT
          time,
          compare(PV, 86400, 172800) as diff
        FROM  (
            SELECT
              count(*) as PV,
              date_format(from_unixtime(__time__), '%H:00') as time
            FROM      log
            GROUP BY
              time
          )
        GROUP BY
          time
        ORDER BY
          time
      • 查询和分析结果每分钟PV
        • 1176.0表示当前时段(例如2020-12-25 00:00~01:00)的网站访问量。
        • 1180表示昨天同时段(例如2020-12-24 00:00~01:00)的网站访问量。
        • 1167.0表示前天同时段(例如2020-12-23 00:00~01:00)的网站访问量。
        • 0.9966101694915255表示当前时段与昨天同时段的网站访问量比值。
        • 1.0077120822622108表示当前时段与前天同时段的网站访问量比值。
    • 查询和分析结果为分列显示
      • 查询和分析语句
        * |
        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,
              compare(PV, 86400, 172800) as diff
            FROM      (
                SELECT
                  count(*) as PV,
                  date_format(from_unixtime(__time__), '%H:00') as time
                FROM          log
                GROUP BY
                  time
              )
            GROUP BY
              time
            ORDER BY
              time
          )
      • 查询和分析结果同比
  • 示例3:环比12月和11月的网站访问量。

    选择查询和分析的时间范围为本月(整点时间),并执行如下查询和分析语句。其中,2592000表示当前时间减去2592000秒(1个月), log表示Logstore名称,date_trunc('month', __time__)表示使用date_trunc函数将时间对齐到月份。

    • 查询和分析语句
      * |
      SELECT
        time,
        compare(PV, 2592000) AS diff
      FROM  (
          SELECT
            count(*) AS PV,
            date_trunc('month', __time__) AS time
          FROM      log
          GROUP BY
            time
        )
      GROUP BY
        time
      ORDER BY
        time
    • 查询和分析结果环比PV

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年)。

返回值类型

JSON数组。格式为[当前计算结果, n秒前的计算结果, 当前计算结果与n秒前计算结果的比值, n秒前的UNIX时间戳]。

示例

环比今天每小时的网站访问量。

选择查询和分析的时间范围为今天(相对),并执行如下查询和分析语句。其中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