Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
, sprawdź, czy usługa SQL databricks
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: OpcjonalneTIMESTAMPwyrażenie wskazująceTIMESTAMP_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 BYdo oddzielania niezależnych liczników. Typowe kolumny partycji to nazwa metryki oraz atrybuty powiązane z metryką. - Użyj
ORDER BYdo określenia kolejności. Zazwyczaj jest to kolumna znaczników czasu powiązana z metryką.
- Używaj
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
valuejest ,NULLwynik toNULL, a wiersz nie jest używany przy obliczaniu różnic dla późniejszych wierszy. - Jeśli
valuejest ujemna lubstart_timejest wcześniejsza niż wstart_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_timeto ,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
valuejest większy niż aktualnyvalue. -
start_timejest dane i jest większe niż wstart_timepoprzednim wierszu .
Musisz podać klauzulę ORDER BY.
Typowe warunki błędów
- RÓŻNICA_LICZNIK_NEGATYWNA_WARTOŚĆ_LICZNIKA
- COUNTER_DIFF_START_TIME_DECREASED
- WINDOW_FUNCTION_WITHOUT_OVER_CLAUSE
- WINDOW_FUNCTION_FRAME_NOT_ORDERED
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