counter_difffungsi jendela analisis

Berlaku untuk:check ditandai ya pemeriksaan Databricks SQL ditandai ya 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: Opsional TIMESTAMP atau TIMESTAMP_NTZ ekspresi 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 BY untuk memisahkan penghitung independen. Kolom partisi yang umum adalah nama metrik dan atribut apa pun yang terkait dengan metrik.
    • Gunakan ORDER BY untuk mendefinisikan urutan. Ini biasanya berupa kolom timestamp yang terkait dengan metrik.

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 value adalah NULL, hasilnya adalah NULL, dan baris tersebut tidak digunakan saat menghitung perbedaan untuk baris berikutnya.
  • Jika value negatif, atau start_time lebih 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_time adalah NULL, nilai tersebut tidak digunakan untuk mendeteksi reset penghitung.

Azure Databricks mendeteksi reset penghitung ketika salah satu dari berikut ini benar:

  • Sebelumnya value lebih besar dari saat ini value.
  • start_timedisediakan dan lebih besar dari baris sebelumnya.start_time

Anda harus memberikan klausa ORDER BY.

Kondisi kesalahan umum

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