Topik ini menjelaskan sintaks dasar fungsi periode komparatif dan memberikan contoh penggunaannya.
Simple Log Service (SLS) mendukung fungsi periode komparatif berikut.
Jika Anda ingin menggunakan string dalam pernyataan analitik, Anda harus membungkus string tersebut dengan tanda petik tunggal (''). String yang tidak dibungkus atau string yang dibungkus dengan tanda petik ganda ("") menunjukkan nama field atau nama kolom. Misalnya, 'status' menunjukkan string status, sedangkan status atau "status" menunjukkan field log status.
Nama Fungsi | Sintaks | Deskripsi | Dukungan SQL | Dukungan SPL |
compare(x, n) | Membandingkan hasil perhitungan untuk periode waktu saat ini dengan hasil dari n detik sebelumnya. | √ | × | |
compare(x, n1, n2, n3...) | Membandingkan hasil perhitungan untuk periode waktu saat ini dengan hasil dari n1, n2, n3... detik sebelumnya. | √ | × | |
ts_compare(x, n) | Membandingkan hasil untuk waktu yang selaras (misalnya per jam) pada periode saat ini dengan hasil dari waktu yang sesuai n detik sebelumnya. | √ | × | |
ts_compare(x, n1, n2, n3...) | Membandingkan hasil untuk waktu yang selaras (misalnya per jam) pada periode saat ini dengan hasil dari waktu yang sesuai n1, n2, n3... detik sebelumnya. | √ | × |
Fungsi
ts_comparememerlukan klausaGROUP BYdengan satu kolom waktu.Fungsi
comparedants_comparetidak dapat disarangkan.
Compare function
Fungsi compare membandingkan hasil perhitungan untuk periode waktu saat ini dengan hasil dari satu atau beberapa periode sebelumnya.
Sintaks
Membandingkan hasil perhitungan untuk periode waktu saat ini dengan hasil dari n detik sebelumnya.
compare(x, n)Membandingkan hasil perhitungan untuk periode waktu saat ini dengan hasil dari n1, n2, n3... detik sebelumnya.
compare(x, n1, n2, n3...)
Parameter
Parameter | Deskripsi |
x | Nilai yang akan dibandingkan. Nilai harus bertipe |
n | Jendela waktu dalam satuan detik. Contoh: |
Nilai kembalian
Mengembalikan sebuah array. Untuk offset waktu tunggal n, formatnya adalah [current_result, previous_result, ratio]. Ketika beberapa offset waktu (n1, n2, ...) ditentukan, formatnya adalah [current_result, previous_result_1, previous_result_2, ..., ratio_1, ratio_2, ...].
Contoh
Contoh 1: Hitung rasio jumlah tampilan halaman (PVs) antara jam saat ini dan jam yang sama pada hari sebelumnya.
Tetapkan rentang waktu untuk kueri dan analisis ke 1 Hour (Aligned Time) dan jalankan pernyataan kueri berikut. Dalam pernyataan tersebut, 86400 merepresentasikan waktu saat ini dikurangi 86400 detik (1 hari), dan log merepresentasikan nama Logstore.
Tampilkan hasil sebagai array
Pernyataan kueri (Debug)
* | SELECT compare(PV, 86400) FROM ( SELECT count(*) AS PV FROM log )Hasil kueri dan analisis
3337.0: Jumlah PV untuk jam saat ini (misalnya, dari pukul 14:00:00 hingga 15:00:00 pada 25 Desember 2020).
3522.0: Jumlah PV untuk jam yang sama pada hari sebelumnya (misalnya, dari pukul 14:00:00 hingga 15:00:00 pada 24 Desember 2020).
0.947473026689381: Rasio jumlah PV antara jam saat ini dan jam yang sama pada hari sebelumnya.
Tampilkan hasil 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
comparemengembalikan sebuah array, di mana diff adalah alias untuk hasil tersebut, dan diff [1] mengambil nilai pertama dari array.Hasil kueri dan analisis
3337.0: Jumlah PV untuk jam saat ini (misalnya, dari pukul 14:00:00 hingga 15:00:00 pada 25 Desember 2020).
3522.0: Jumlah PV untuk jam yang sama pada hari sebelumnya (misalnya, dari pukul 14:00:00 hingga 15:00:00 pada 24 Desember 2020).
0.947473026689381: Rasio jumlah PV antara jam saat ini dan jam yang sama pada hari sebelumnya.
Contoh 2: Untuk jam saat ini, hitung jumlah permintaan untuk setiap kombinasi status permintaan dan metode, lalu bandingkan hasilnya dengan jumlah dari jam sebelumnya.
Pilih 1 Hour (Aligned Time) sebagai rentang waktu untuk kueri dan analisis, lalu jalankan pernyataan kueri dan analisis berikut. Dalam pernyataan tersebut, 3600 merepresentasikan waktu saat ini dikurangi 3600 detik (1 jam), dan log merepresentasikan 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: Hasil mencakup tiga kolom: status, request_method, dan _col2. Kolom _col2 berisi array yang dikembalikan oleh fungsi
comparedalam format[current_period_value, previous_period_value, ratio]. Sebagai contoh, baris untuk kode status 501 dan metode permintaan GET mengembalikan[39.0, 13.0, 3.0]. Ini menunjukkan jumlah PV sebesar 39 untuk periode saat ini, 13 untuk periode sebelumnya, dan rasio period-over-period sebesar 3.0.
Ts_compare function
Fungsi ts_compare membandingkan hasil perhitungan untuk waktu yang selaras (misalnya per jam) pada periode saat ini dengan hasil dari waktu yang sesuai pada periode sebelumnya.
Fungsi ts_compare memerlukan klausa GROUP BY dengan satu kolom waktu.
Sintaks
Membandingkan hasil perhitungan untuk waktu yang selaras pada periode waktu saat ini dengan hasil dari waktu yang selaras pada periode n detik sebelumnya.
ts_compare(x, n)Membandingkan hasil perhitungan untuk waktu yang selaras pada periode saat ini dengan hasil dari waktu yang sesuai n1, n2, n3... detik sebelumnya.
ts_compare(x, n1, n2, n3...)
Parameter
Parameter | Deskripsi |
x | Nilai yang akan dibandingkan. Nilai harus bertipe |
n | Jendela waktu dalam satuan detik. Contoh: |
Nilai kembalian
Mengembalikan sebuah array. Untuk offset waktu tunggal n, formatnya adalah [current_result, previous_result, ratio, previous_unix_timestamp]. Ketika beberapa offset waktu (n1, n2, ...) ditentukan, formatnya adalah [current_result, previous_result_1, previous_result_2, ..., ratio_1, ratio_2, ..., previous_unix_timestamp_1, previous_unix_timestamp_2, ...].
Contoh
Contoh 1: Bandingkan jumlah tampilan halaman (PVs) per jam hari ini dengan jumlah pada jam yang sama pada hari sebelumnya dan dua hari lalu.
Tetapkan rentang waktu untuk kueri dan analisis ke Today (Aligned Time), lalu jalankan pernyataan kueri berikut. Dalam pernyataan ini, 86400 merepresentasikan waktu saat ini dikurangi 86400 detik (1 hari), 172800 merepresentasikan waktu saat ini dikurangi 172800 detik (2 hari), log merepresentasikan nama Logstore, dan date_trunc('hour',__time__ ) merepresentasikan penggunaan fungsi date_trunc untuk menyelaraskan waktu ke jam.
Tampilkan hasil sebagai 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: Jumlah PV untuk periode waktu saat ini (misalnya, dari pukul 00:00 hingga 01:00 pada 22 September 2022).
1191.0: Jumlah PV untuk periode waktu yang sama pada hari sebelumnya (misalnya, dari pukul 00:00 hingga 01:00 pada 21 September 2022).
1253.0: Jumlah PV untuk periode waktu yang sama dua hari lalu (misalnya, dari pukul 00:00 hingga 01:00 pada 20 September 2022).
0.9857262804366079: Rasio jumlah PV antara jam saat ini dan jam yang sama pada hari sebelumnya.
0.936951316839585: Rasio jumlah PV antara jam saat ini dan jam yang sama dua hari lalu.
1663689600.0: Stempel waktu UNIX untuk pukul 00:00 pada 21 September 2022.
1663603200.0: Stempel waktu UNIX untuk pukul 00:00 pada 20 September 2022.
CatatanStempel waktu dalam hasil dapat berbeda tergantung kapan Anda menjalankan kueri.
Tampilkan hasil 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: Setiap baris dalam tabel hasil merepresentasikan data satu jam. time adalah stempel waktu per jam. day1, day2, dan day3 adalah jumlah PV untuk hari saat ini, hari sebelumnya, dan dua hari sebelumnya, secara berurutan. ratio1 adalah rasio antara hari saat ini dan hari sebelumnya, sedangkan ratio2 adalah rasio antara hari saat ini dan dua hari sebelumnya. Nilai yang mendekati 1.0 menunjukkan sedikit perubahan.
Contoh 2: Hitung perubahan jumlah tampilan halaman (PVs) dari jam ke jam untuk hari ini.
Tetapkan rentang waktu untuk kueri dan analisis ke Today (relative), lalu jalankan pernyataan kueri berikut. Dalam pernyataan ini, 3600 merepresentasikan waktu saat ini dikurangi 3600 detik (1 jam), log adalah nama Logstore, dan date_trunc('hour',__time__ ) menggunakan fungsi
date_truncuntuk menyelaraskan waktu ke jam.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 berisi dua kolom: time dan data. Sebagai contoh, ketika time adalah
2021-01-27 00:00:00.000, data adalah[1160.0,10034.0,0.11560693641618497,1611673200.0]. Ketika time adalah2021-01-27 01:00:00.000, data adalah[10177.0,1160.0,8.773275862068966,1611676800.0]. Ketika time adalah2021-01-27 02:00:00.000, data adalah[26804.0,10177.0,2.633782057580195,1611680400.0].CatatanStempel waktu dalam hasil dapat berbeda tergantung kapan Anda menjalankan kueri.