すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:期間比較関数

最終更新日:Jun 23, 2026

このトピックでは、期間比較関数の基本的な構文と例について説明します。

Simple Log Service (SLS) は、以下の期間比較関数をサポートしています。

重要

分析文で文字列を使用する場合は、文字列を単一引用符 (') で囲む必要があります。囲まれていない文字列や二重引用符 ("") で囲まれた文字列は、フィールド名または列名を示します。たとえば、'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)

現在の期間における、1 時間ごとなどの整列時間の結果を、n 秒前の対応する時間の結果と比較します。

×

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

現在の期間における、1 時間ごとなどの整列時間の結果を、n1、n2、n3... 秒前の対応する時間の結果と比較します。

×

重要
  • ts_compare 関数には、単一の時間列を持つ GROUP BY 句が必要です。

  • compare 関数と ts_compare 関数はネストできません。

Compare 関数

compare 関数は、現在の期間の計算結果を、1 つ以上の過去の期間の結果と比較します。

構文

  • 現在の期間の計算結果を、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 の場合、フォーマットは [current_result, previous_result, ratio] です。複数の時間オフセット (n1, n2, ...) が指定された場合、フォーマットは [current_result, previous_result_1, previous_result_2, ..., ratio_1, ratio_2, ...] です。

  • 例 1:現在の時間と前日の同じ時間のページビュー (PV) の比率を計算します。

    クエリと分析の時間範囲を [1 時間 (整列時間)] に設定し、次のクエリ文を実行します。文中の 86400 は現在時刻から 86400 秒 (1 日) 前を、log は Logstore 名を表します。

    • 結果を配列として表示

      • クエリ文 (デバッグ)

        * |
        SELECT
          compare(PV, 86400)
        FROM  (
            SELECT
              count(*) AS PV
            FROM      log
          )
      • クエリと分析の結果

        • 3337.0:現在の時間の PV (例:2020 年 12 月 25 日 14:00:00 から 15:00:00 まで)。

        • 3522.0:前日の同じ時間の PV (例:2020 年 12 月 24 日 14:00:00 から 15:00:00 まで)。

        • 0.947473026689381:現在の時間と前日の同じ時間の PV の比率。

    • 結果を別々の列に表示

      • クエリ文 (デバッグ)

        * |
        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 関数は配列を返します。ここで、diff は結果のエイリアスであり、diff [1] は配列から最初の値を取得します。

      • クエリと分析の結果

        • 3337.0:現在の時間の PV (例:2020 年 12 月 25 日 14:00:00 から 15:00:00 まで)。

        • 3522.0:前日の同じ時間の PV (例:2020 年 12 月 24 日 14:00:00 から 15:00:00 まで)。

        • 0.947473026689381:現在の時間と前日の同じ時間の PV の比率。

  • 例 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
    • クエリと分析の結果:結果には、statusrequest_method、および _col2 の 3 つの列が含まれます。_col2 列には、compare 関数によって返される配列が [current_period_value, previous_period_value, ratio] のフォーマットで含まれます。たとえば、ステータスコードが 501 で GET リクエストメソッドの行は [39.0, 13.0, 3.0] を返します。これは、現在の期間の PV 数が 39、前の期間が 13 で、前期比が 3.0 であることを示します。

Ts_compare 関数

ts_compare 関数は、現在の期間における整列時間 (例:1 時間ごと) の計算結果を、過去の期間の対応する時間の結果と比較します。

重要

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 の場合、フォーマットは [current_result, previous_result, ratio, previous_unix_timestamp] です。複数の時間オフセット (n1, n2, ...) が指定された場合、フォーマットは [current_result, previous_result_1, previous_result_2, ..., ratio_1, ratio_2, ..., previous_unix_timestamp_1, previous_unix_timestamp_2, ...] です。

  • 例 1:今日の 1 時間ごとのページビュー (PV) を、前日および 2 日前の同じ時間と比較します。

    クエリと分析の時間範囲を [今日 (整列時間)] に設定し、次のクエリ文を実行します。この文では、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:現在の期間の PV (例:2022 年 9 月 22 日 00:00 から 01:00 まで)。

        • 1191.0:前日の同じ期間の PV (例:2022 年 9 月 21 日 00:00 から 01:00 まで)。

        • 1253.0:2 日前の同じ期間の PV (例:2022 年 9 月 20 日 00:00 から 01:00 まで)。

        • 0.9857262804366079:現在の時間と前日の同じ時間の PV の比率。

        • 0.936951316839585:現在の時間と 2 日前の同じ時間の PV の比率。

        • 1663689600.0:2022 年 9 月 21 日 00:00 の UNIX タイムスタンプ。

        • 1663603200.0:2022 年 9 月 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
          )
      • クエリと分析の結果:結果テーブルの各行は 1 時間のデータを表します。time は 1 時間ごとのタイムスタンプです。day1day2day3 はそれぞれ、当日、前日、2 日前の PV 数です。ratio1 は当日と前日の比率、ratio2 は当日と 2 日前の比率です。1.0 に近い値は、変化がほとんどないことを示します。

  • 例 2:今日のページビュー (PV) の時間単位の変化を計算します。

    クエリと分析の時間範囲を [今日 (相対)] に設定し、次のクエリ文を実行します。この文では、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
    • クエリと分析の結果には、timedata の 2 つの列が含まれます。たとえば、time2021-01-27 00:00:00.000 の場合、data[1160.0,10034.0,0.11560693641618497,1611673200.0] です。time2021-01-27 01:00:00.000 の場合、data[10177.0,1160.0,8.773275862068966,1611676800.0] です。time2021-01-27 02:00:00.000 の場合、data[26804.0,10177.0,2.633782057580195,1611680400.0] です。

      説明

      結果のタイムスタンプは、クエリを実行する時間によって異なる場合があります。