このトピックでは、期間比較関数の基本的な構文と例について説明します。
Simple Log Service (SLS) は、以下の期間比較関数をサポートしています。
分析文で文字列を使用する場合は、文字列を単一引用符 (') で囲む必要があります。囲まれていない文字列や二重引用符 ("") で囲まれた文字列は、フィールド名または列名を示します。たとえば、'status' は status という文字列を示し、status または "status" は status というログフィールドを示します。
関数名 | 構文 | 説明 | SQL サポート | SPL サポート |
compare(x, n) | 現在の期間の計算結果を、n 秒前の結果と比較します。 | √ | × | |
compare(x, n1, n2, n3...) | 現在の期間の計算結果を、n1、n2、n3... 秒前の結果と比較します。 | √ | × | |
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 | 比較する値。値は |
n | タイムウィンドウ (秒単位)。例: |
戻り値
配列を返します。単一の時間オフセット 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クエリと分析の結果:結果には、status、request_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 | 比較する値。値は |
n | タイムウィンドウ (秒単位)。例: |
戻り値
配列を返します。単一の時間オフセット 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 時間ごとのタイムスタンプです。day1、day2、day3 はそれぞれ、当日、前日、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クエリと分析の結果には、time と data の 2 つの列が含まれます。たとえば、time が
2021-01-27 00:00:00.000の場合、data は[1160.0,10034.0,0.11560693641618497,1611673200.0]です。time が2021-01-27 01:00:00.000の場合、data は[10177.0,1160.0,8.773275862068966,1611676800.0]です。time が2021-01-27 02:00:00.000の場合、data は[26804.0,10177.0,2.633782057580195,1611680400.0]です。説明結果のタイムスタンプは、クエリを実行する時間によって異なる場合があります。