counter_diff funkcja okna analitycznego

Dotyczy:sprawdź, czy zaznaczono tak , sprawdź, czy usługa SQL databricks została oznaczona jako tak Databricks Runtime 19.0 lub nowsza

Oblicza różnice między kolejnymi skumulowanymi wartościami liczników w szeregu czasowym, konwertując liczniki kumulacyjne do formatu delta.

Syntax

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Nieujemne wyrażenie liczbowe, które reprezentuje sumujący licznik.
  • start_time: Opcjonalne TIMESTAMP wyrażenie wskazujące TIMESTAMP_NTZ , kiedy licznik ostatnio został zresetowany do zera. Użyj go do sygnalizowania resetów liczników niezależnie od wartości licznika.
  • Klauzula OVER: Klauzula opisująca okienko.
    • Używaj PARTITION BY do oddzielania niezależnych liczników. Typowe kolumny partycji to nazwa metryki oraz atrybuty powiązane z metryką.
    • Użyj ORDER BY do określenia kolejności. Zazwyczaj jest to kolumna znaczników czasu powiązana z metryką.

Returns

Typ wyniku jest zgodny z value.

Zwraca różnicę między aktualną wartością licznika a poprzednią wartością licznika zgodnie z kolejnością zdefiniowaną w ORDER BY klauzuli OVER .

Funkcja obsługuje następujące przypadki:

  • Jeśli value jest , NULLwynik to NULL, a wiersz nie jest używany przy obliczaniu różnic dla późniejszych wierszy.
  • Jeśli value jest ujemna lub start_time jest wcześniejsza niż w start_timepoprzednim wierszu , Azure Databricks zgłasza błąd.
  • Dla pierwszego wiersza podziału wynik to NULL.
  • Przy resetowaniu licznika wynik to NULL.
  • Jeśli poprzedni lub bieżący start_time to , NULLta wartość nie jest używana do wykrywania resetów liczników.

Azure Databricks wykrywa reset licznika, gdy spełnione są następujące rzeczy:

  • Poprzedni value jest większy niż aktualny value.
  • start_time jest dane i jest większe niż w start_timepoprzednim wierszu .

Musisz podać klauzulę ORDER BY.

Typowe warunki błędów

Przykłady

> 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