counter_diff funzione finestra analitica

Si applica a:check contrassegnato come sì controllo SQL di Databricks contrassegnato come sì 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 optional TIMESTAMP o TIMESTAMP_NTZ un'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 BY per separare i segnali indipendenti. Le colonne tipiche delle partizioni sono il nome della metrica e qualsiasi attributo legato alla metrica.
    • Usalo ORDER BY per definire l'ordine. Di solito si tratta di una colonna di timestamp legata alla metrica.

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, o start_time è precedente alla riga start_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'attuale value.
  • start_time è fornito ed è maggiore della riga start_timeprecedente .

È necessario specificare una clausola ORDER BY.

Condizioni di errore comuni

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