counter_diff analytische vensterfunctie

Van toepassing op:controleren gemarkeerd ja Databricks SQL-controle gemarkeerd als ja Databricks Runtime 19.0 en hoger

Berekent de verschillen tussen opeenvolgende cumulatieve tellerwaarden in een tijdreeks, waarbij cumulatieve tellers worden omgezet naar delta-formaat.

Syntax

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Een niet-negatieve numerieke uitdrukking die een cumulatieve teller vertegenwoordigt.
  • start_time: Een optionele TIMESTAMP of TIMESTAMP_NTZ expressie die aangeeft wanneer de teller voor het laatst op nul is gezet. Gebruik het om teller te reseten onafhankelijk van de tellerwaarde.
  • OVER-clausule: De clausule die de venstering beschrijft.
    • Gebruik PARTITION BY het om onafhankelijke counters te scheiden. Typische partitiekolommen zijn de naam van de metriek en eventuele attributen die aan de metriek gekoppeld zijn.
    • Gebruik ORDER BY om de volgorde te definiĆ«ren. Dit is meestal een tijdstempelkolom die aan de metriek is gekoppeld.

Returns

Het resultaattype komt overeen met value.

Geeft het verschil terug tussen de huidige tellerwaarde en de vorige tellerwaarde volgens de volgorde die in de OVER clausule is gedefinieerdORDER BY.

De functie behandelt de volgende gevallen:

  • Als value is NULL, is NULLhet resultaat , en wordt de rij niet gebruikt bij het berekenen van verschillen voor latere rijen.
  • Als value negatief is, of start_time eerder is dan de vorige rij start_time, levert Azure Databricks een foutmelding op.
  • Voor de eerste rij in de partitie is NULLhet resultaat .
  • Bij een counterreset is NULLhet resultaat .
  • Als de vorige of de huidige start_time is NULL, wordt die waarde niet gebruikt om counter-resets te detecteren.

Azure Databricks detecteert een tellerreset wanneer een van de volgende waar is:

  • De vorige value is groter dan de huidige value.
  • start_timeis gegeven en is groter dan de vorige rij .start_time

U moet een ORDER BY clausule opgeven.

Algemene foutvoorwaarden

Voorbeelden

> 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