Topik ini menjelaskan sintaks dasar dan memberikan contoh penggunaan fungsi perbandingan periode-over-periode.
Layanan Log Sederhana mendukung fungsi perbandingan periode-over-periode berikut.
Jika Anda ingin menggunakan string dalam pernyataan analitik, Anda harus membungkus string tersebut dengan tanda kutip tunggal (''). String yang tidak dibungkus atau yang dibungkus dengan tanda kutip ganda ("") menunjukkan nama field atau nama kolom. Misalnya, 'status' menunjukkan string status, sedangkan status atau "status" menunjukkan field log status.
Function | Syntax | Description | Supported in SQL | Support for SPL |
compare(x, n) | Membandingkan hasil perhitungan periode saat ini dengan hasil perhitungan periode n detik sebelumnya. | √ | × | |
compare(x, n1, n2, n3...) | Membandingkan hasil perhitungan periode saat ini dengan hasil perhitungan beberapa periode n1, n2, dan n3 detik sebelumnya. | √ | × | |
ts_compare(x, n) | Membandingkan hasil perhitungan suatu jangka waktu, seperti per jam, pada periode saat ini dengan hasil perhitungan jangka waktu n detik sebelumnya. | √ | × | |
ts_compare(x, n1, n2, n3...) | Membandingkan hasil perhitungan suatu jangka waktu, seperti per jam, pada periode saat ini dengan hasil perhitungan jangka waktu n1, n2, dan n3 detik sebelumnya. | √ | × |
Anda harus mengelompokkan hasil fungsi ts_compare berdasarkan kolom waktu menggunakan klausa GROUP BY. Hanya satu kolom waktu yang didukung.
Fungsi compare dan ts_compare tidak dapat disarangkan.
compare function
Fungsi compare membandingkan hasil perhitungan periode saat ini dengan hasil perhitungan periode yang n detik sebelumnya.
Sintaks
Membandingkan hasil perhitungan periode saat ini dengan hasil perhitungan periode yang n detik sebelumnya.
compare(x, n)Membandingkan hasil perhitungan periode saat ini dengan hasil perhitungan beberapa periode yang masing-masing n1, n2, dan n3 detik sebelumnya.
compare(x, n1, n2, n3...)
Parameter
Parameter | Description |
x | Nilainya bertipe double atau long. |
n | Jendela waktu dalam satuan detik. Contoh: 3600 (1 jam), 86400 (1 hari), 604800 (1 minggu), dan 31622400 (1 tahun). |
Tipe nilai kembalian
Array. Formatnya adalah [hasil saat ini, hasil dari n detik lalu, rasio hasil saat ini terhadap hasil dari n detik lalu].
Contoh
Contoh 1: Hitung rasio jumlah tampilan halaman (PV) website untuk jam saat ini dibandingkan dengan jam yang sama kemarin.
Tetapkan jangka waktu kueri ke 1 Hour (Time Frame) dan jalankan pernyataan kueri berikut. Dalam pernyataan tersebut, 86400 menentukan periode 86.400 detik (1 hari) sebelum waktu saat ini, dan log menentukan nama Logstore.
Hasil kueri dan analisis dikembalikan sebagai array.
Pernyataan kueri (Debug)
* | SELECT compare(PV, 86400) FROM ( SELECT count(*) AS PV FROM log )Hasil kueri dan analisis

3337.0 adalah jumlah PV pada jam saat ini, misalnya dari pukul 14.00.00 hingga 15.00.00 pada 25 Desember 2020.
3522.0 adalah jumlah PV pada jam yang sama kemarin, misalnya dari pukul 14.00.00 hingga 15.00.00 pada 24 Desember 2020.
0.947473026689381 adalah rasio PV pada jam saat ini dibandingkan dengan jam yang sama kemarin.
Tampilkan hasil kueri dan analisis dalam kolom terpisah
Pernyataan kueri (Debug)
* | 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 ) )Fungsi compare mengembalikan array. Dalam pernyataan ini, diff adalah alias untuk hasilnya, dan diff[1] mengambil nilai pertama dari array tersebut.
Hasil kueri dan analisis

3337.0 adalah jumlah PV pada jam saat ini, misalnya dari pukul 14.00.00 hingga 15.00.00 pada 25 Desember 2020.
3522.0 adalah jumlah PV pada jam yang sama kemarin, misalnya dari pukul 14.00.00 hingga 15.00.00 pada 24 Desember 2020.
0.947473026689381 adalah rasio PV pada jam saat ini dibandingkan dengan jam yang sama kemarin.
Contoh 2: Hitung jumlah permintaan untuk setiap metode permintaan dan status pada jam saat ini, lalu bandingkan hasilnya dengan data pada jam yang sama kemarin.
Tetapkan jangka waktu kueri ke 1 Hour (Time Frame) dan jalankan pernyataan kueri berikut. Dalam pernyataan tersebut, 3600 menentukan periode 3.600 detik (1 jam) sebelum waktu saat ini, dan log menentukan nama Logstore.
Pernyataan kueri (Debug)
* | 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_methodHasil kueri dan analisis

ts_compare function
Fungsi ts_compare membandingkan hasil perhitungan suatu jangka waktu, seperti per jam, pada periode saat ini dengan hasil perhitungan jangka waktu yang n detik sebelumnya.
Anda harus mengelompokkan hasil fungsi ts_compare berdasarkan kolom waktu menggunakan klausa GROUP BY. Hanya satu kolom waktu yang didukung.
Sintaks
Membandingkan hasil perhitungan suatu jangka waktu, seperti per jam, pada periode saat ini dengan hasil perhitungan jangka waktu yang n detik sebelumnya.
ts_compare(x, n)Membandingkan hasil perhitungan suatu jangka waktu, seperti per jam, pada periode saat ini dengan hasil perhitungan jangka waktu yang masing-masing n1, n2, dan n3 detik sebelumnya.
ts_compare(x, n1, n2, n3...)
Parameter
Parameter | Description |
x | Nilainya bertipe double atau long. |
n | Jendela waktu dalam satuan detik. Contoh: 3600 (1 jam), 86400 (1 hari), 604800 (1 minggu), dan 31622400 (1 tahun). |
Tipe nilai kembalian
Array. Formatnya adalah [hasil saat ini, hasil dari n detik lalu, rasio hasil saat ini terhadap hasil dari n detik lalu, Stempel waktu UNIX dari n detik lalu].
Contoh
Contoh 1: Hitung rasio PV website per jam hari ini dibandingkan dengan PV pada jam yang sama kemarin dan dua hari lalu.
Tetapkan jangka waktu kueri ke Today (Time Frame) dan jalankan pernyataan kueri berikut. Dalam pernyataan tersebut, 86400 menentukan periode 86.400 detik (1 hari) sebelum waktu saat ini, 172800 menentukan periode 172.800 detik (2 hari) sebelum waktu saat ini, log menentukan nama Logstore, dan date_trunc('hour',__time__) menggunakan fungsi date_trunc untuk menyelaraskan waktu ke jam terdekat.
Tampilkan hasil kueri dan analisis dalam bentuk array
Pernyataan kueri (Debug)
* | 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 timeHasil kueri dan analisis

1174.0 adalah jumlah PV pada periode saat ini, misalnya dari pukul 00.00 hingga 01.00 pada 22 September 2022.
1191.0 adalah jumlah PV pada periode yang sama kemarin, misalnya dari pukul 00.00 hingga 01.00 pada 21 September 2022.
1253.0 adalah jumlah PV pada periode yang sama dua hari lalu, misalnya dari pukul 00.00 hingga 01.00 pada 20 September 2022.
0.9857262804366079 adalah rasio PV pada periode saat ini dibandingkan dengan periode yang sama kemarin.
0.936951316839585 adalah rasio PV pada periode saat ini dibandingkan dengan periode yang sama dua hari lalu.
1663689600.0 adalah Stempel waktu UNIX untuk pukul 00.00 pada 21 September 2022.
1663603200.0 adalah Stempel waktu UNIX untuk pukul 00.00 pada 20 September 2022.
CatatanWaktu dalam hasil kueri dan analisis dapat berbeda tergantung pada saat Anda menjalankan kueri.
Tampilkan hasil kueri dan analisis dalam kolom terpisah
Pernyataan kueri (Debug)
* | 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 )Hasil kueri dan analisis

Contoh 2: Hitung perubahan PV website per jam untuk hari ini.
Tetapkan jangka waktu kueri ke Today (Relative) dan jalankan pernyataan kueri berikut. Dalam pernyataan tersebut, 3600 menentukan periode 3.600 detik (1 jam) sebelum waktu saat ini, log menentukan nama Logstore, dan date_trunc('hour',__time__) menggunakan fungsi date_trunc untuk menyelaraskan waktu ke jam terdekat.
Pernyataan kueri (Debug)
* | 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 timeHasil kueri dan analisis
CatatanWaktu dalam hasil kueri dan analisis dapat berbeda tergantung pada saat Anda menjalankan kueri.