このトピックでは、比較期間関数の構文と使用例について説明します。
Log Service は、以下の比較期間関数をサポートしています。
分析文で文字列を使用する場合は、文字列をシングルクォーテーション ('') で囲む必要があります。囲まれていない文字列、またはダブルクォーテーション ("") で囲まれた文字列は、フィールド名またはカラム名を示します。たとえば、'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 つ以上の以前の期間の結果と比較します。
構文
-
現在の結果を、単一の以前の期間の結果と比較します。
compare(x, n) -
現在の結果を、複数の以前の期間の結果と比較します。
compare(x, n1, n2, n3...)
パラメータ
|
パラメータ |
説明 |
|
x |
比較する値。 |
|
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は 86,400 秒(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 時間(アライメント済み)] に設定し、次のクエリ文を実行します。この文では、
3600は 3,600 秒(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 関数は、現在の期間における整列された時間 (例: 1 時間ごと) の結果を、1 つ以上の以前の期間における同じ整列された時間の結果と比較します。
ts_compare 関数には、単一のタイムカラムを持つ GROUP BY 句が必要です。
構文
-
整列された時間の結果を、単一の以前の期間における対応する時間の結果と比較します。
ts_compare(x, n) -
整列された時間の結果を、複数の以前の期間における対応する時間の結果と比較します。
ts_compare(x, n1, n2, n3...)
パラメータ
|
パラメータ |
説明 |
|
x |
比較する値。 |
|
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: 今日の時間ごとのページビュー (PV) を、2 日前までの同じ時間の PV と比較します。
クエリと分析の時間範囲を [本日 (調整済み)] に設定し、次のクエリ文を実行します。この文では、
86400は 1 日のオフセットを、172800は 2 日のオフセットを指定します。logは Logstore の名前であり、date_trunc('hour',__time__)はタイムスタンプを時間単位で揃えます。-
結果を配列で表示
-
クエリ文(デバッグ)
* | 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-09-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-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は 3,600 秒(1 時間)のオフセットを指定し、logは Logstore の名前であり、date_trunc('hour',__time__ )はタイムスタンプを時単位で揃えます。-
クエリ文 (デバッグ)
* | 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 -
クエリと分析結果
説明結果のタイムスタンプは、クエリを実行するタイミングによって異なる場合があります。
-