Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
pemeriksaan Databricks SQL
Databricks Runtime 19.0 ke atas
Menghitung perbedaan antara nilai penghitung kumulatif berturut-turut dalam deret waktu, mengonversi penghitung kumulatif ke format delta.
Syntax
counter_diff( value [, start_time] ) OVER clause
Arguments
-
value: Ekspresi numerik non-negatif yang mewakili penghitung kumulatif. -
start_time: OpsionalTIMESTAMPatauTIMESTAMP_NTZekspresi yang menunjukkan kapan penghitung terakhir direset ke nol. Gunakan untuk memberi sinyal reset counter secara independen dari nilai counter. -
Klausa OVER: Klausa yang menggambarkan proses windowing.
- Gunakan
PARTITION BYuntuk memisahkan penghitung independen. Kolom partisi yang umum adalah nama metrik dan atribut apa pun yang terkait dengan metrik. - Gunakan
ORDER BYuntuk mendefinisikan urutan. Ini biasanya berupa kolom timestamp yang terkait dengan metrik.
- Gunakan
Returns
Jenis hasil cocok dengan value.
Mengembalikan selisih antara nilai counter saat ini dan nilai counter sebelumnya sesuai urutan yang didefinisikan oleh dalam ORDER BYOVER klausa.
Fungsi ini menangani kasus-kasus berikut:
- Jika
valueadalahNULL, hasilnya adalahNULL, dan baris tersebut tidak digunakan saat menghitung perbedaan untuk baris berikutnya. - Jika
valuenegatif, ataustart_timelebih awal dari baris sebelumnya,start_timeAzure Databricks akan menampilkan kesalahan. - Untuk baris pertama dalam partisi, hasilnya adalah
NULL. - Pada reset penghitung, hasilnya adalah
NULL. - Jika sebelumnya atau arus
start_timeadalahNULL, nilai tersebut tidak digunakan untuk mendeteksi reset penghitung.
Azure Databricks mendeteksi reset penghitung ketika salah satu dari berikut ini benar:
- Sebelumnya
valuelebih besar dari saat inivalue. -
start_timedisediakan dan lebih besar dari baris sebelumnya.start_time
Anda harus memberikan klausa ORDER BY.
Kondisi kesalahan umum
- COUNTER_DIFF_NEGATIVE_COUNTER_VALUE
- SELISIH_PENGHITUNG_WAKTU_MULAI_BERKURANG
- WINDOW_FUNCTION_WITHOUT_OVER_CLAUSE
- WINDOW_FUNCTION_FRAME_NOT_ORDERED
Contoh
> SELECT m, t, counter_diff(c) OVER (PARTITION BY m ORDER BY t)
FROM VALUES
('http_requests', TIMESTAMP '2026-01-01T00:00:00', 100),
('http_requests', TIMESTAMP '2026-01-01T00:01:00', 200),
('http_requests', TIMESTAMP '2026-01-01T00:02:00', 400)
AS tab(m, t, c);
http_requests 2026-01-01 00:00:00 NULL
http_requests 2026-01-01 00:01:00 100
http_requests 2026-01-01 00:02:00 200
-- Counter reset detected by a decrease in value
> SELECT m, t, counter_diff(c) OVER (PARTITION BY m ORDER BY t)
FROM VALUES
('http_requests', TIMESTAMP '2026-01-01T00:00:00', 100),
('http_requests', TIMESTAMP '2026-01-01T00:01:00', 200),
('http_requests', TIMESTAMP '2026-01-01T00:02:00', 400),
('http_requests', TIMESTAMP '2026-01-01T00:04:00', 50)
AS tab(m, t, c);
http_requests 2026-01-01 00:00:00 NULL
http_requests 2026-01-01 00:01:00 100
http_requests 2026-01-01 00:02:00 200
http_requests 2026-01-01 00:04:00 NULL
-- Counter reset detected by a change in start_time
> SELECT m, t, counter_diff(c, st) OVER (PARTITION BY m ORDER BY t)
FROM VALUES
('http_requests', TIMESTAMP '2026-01-01T00:01:00', TIMESTAMP '2026-01-01T00:00:00', 100),
('http_requests', TIMESTAMP '2026-01-01T00:02:00', TIMESTAMP '2026-01-01T00:00:00', 200),
('http_requests', TIMESTAMP '2026-01-01T00:04:00', TIMESTAMP '2026-01-01T00:02:31', 400)
AS tab(m, t, st, c);
http_requests 2026-01-01 00:01:00 NULL
http_requests 2026-01-01 00:02:00 100
http_requests 2026-01-01 00:04:00 NULL