Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:
controllo SQL di Databricks
Databricks Runtime 19.0 e versioni successive
Calcola le differenze tra i valori cumulativi consecutivi dei contatori in una serie temporale, convertendo i contatori cumulativi in formato delta.
Syntax
counter_diff( value [, start_time] ) OVER clause
Arguments
-
value: Un'espressione numerica non negativa che rappresenta un contatore cumulativo. -
start_time: Un optionalTIMESTAMPoTIMESTAMP_NTZun'espressione che indica quando il contatore è stato resettato l'ultima volta a zero. Usalo per segnalare il reset del contatore indipendentemente dal valore del contatore. -
Clausola OVER: La clausola che descrive la finestra di vetro.
- Usalo
PARTITION BYper separare i segnali indipendenti. Le colonne tipiche delle partizioni sono il nome della metrica e qualsiasi attributo legato alla metrica. - Usalo
ORDER BYper definire l'ordine. Di solito si tratta di una colonna di timestamp legata alla metrica.
- Usalo
Returns
Il tipo di risultato corrisponde a value.
Restituisce la differenza tra il valore attuale del contatore e il valore precedente del contatore secondo l'ordine definito da ORDER BY nella OVER clausola.
La funzione gestisce i seguenti casi:
- Se
valueèNULL, il risultato èNULL, e la riga non viene utilizzata nel calcolo delle differenze per le righe successive. - Se
valueè negativo, ostart_timeè precedente alla rigastart_timeprecedente , Azure Databricks genera un errore. - Per la prima riga della partizione, il risultato è
NULL. - Su un reset da contatore, il risultato è
NULL. - Se il precedente o il corrente
start_timeèNULL, quel valore non viene usato per rilevare i reset del contatore.
Azure Databricks rileva un reset del contatore quando una delle seguenti opzioni è vera:
- Il precedente
valueè maggiore dell'attualevalue. -
start_timeè fornito ed è maggiore della rigastart_timeprecedente .
È necessario specificare una clausola ORDER BY.
Condizioni di errore comuni
- COUNTER_DIFF_VALORE_CONTATORE_NEGATIVO
- COUNTER_DIFF_START_TIME_DECREASED
- WINDOW_FUNCTION_WITHOUT_OVER_CLAUSE
- WINDOW_FUNCTION_FRAME_NOT_ORDERED
Esempi
> 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