counter_diff analitik pencere işlevi

Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL denetimi evet olarak işaretlendi Databricks Runtime 19.0 ve üzeri

Bir zaman serisinde ardışık kümülatif sayaç değerleri arasındaki farkları hesaplar, kümülatif sayaçları delta formatına dönüştürür.

Syntax

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Kümülatif sayacı temsil eden negatif olmayan sayısal ifade.
  • start_time: Sayacın en son sıfırlandığı zamanı gösteren isteğe TIMESTAMP bağlı bir ifade TIMESTAMP_NTZ veya ifade. Sayaç değerinden bağımsız olarak sayaç sıfırlamalarını sinyal etmek için kullanın.
  • OVER maddesi: Pencere belirlemeyi tanımlayan madde.
    • Bağımsız sayaçları ayırmak için kullanın PARTITION BY . Tipik bölüm sütunları, metrik adı ve bu metrike bağlı herhangi bir özniteliktir.
    • Sırayı tanımlamak için kullanılır ORDER BY . Bu genellikle metrike bağlı bir zaman damgası sütunudur.

İadeler

Sonuç tipi value ile eşleşir.

Mevcut sayaç değeri ile önceki sayaç değeri arasındaki farkı, maddede OVER tanımlanan ORDER BY sıraya göre döndürür.

Fonksiyon aşağıdaki vakaları yönetir:

  • Eğer value ise NULL, sonuç 'dir NULLve sonraki sıralar için farklar hesaplanırken satır kullanılmaz.
  • Eğer value negatif ise veya start_time önceki satırdan start_timedaha erken ise, Azure Databricks hata oluşturur.
  • Bölümdeki ilk satır için sonuç şudur:NULL
  • Bir sayaç sıfırlamasında sonuç 'dir.NULL
  • Önceki veya akım start_timeNULLise, bu değer sayaç sıfırlamalarını tespit etmek için kullanılmaz.

Azure Databricks, aşağıdaki durumlardan biri doğruysa, sayac sıfırlamasını algılar:

  • Önceki value mevcut olandan valuebüyüktür.
  • start_time ve önceki satırlardan start_timedaha büyüktür.

Bir ORDER BY madde sağlamanız gerekir.

Yaygın hata koşulları

Örnekler

> 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