counter_diff analytisk fönsterfunktion

Gäller för:check markerad ja Databricks SQL-kontroll markerad ja Databricks Runtime 19.0 och senare

Beräknar skillnaderna mellan på varandra följande kumulativa räknarvärden i en tidsserie, och omvandlar kumulativa räknare till deltaformat.

Syntax

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Ett icke-negativt numeriskt uttryck som representerar en kumulativ räknare.
  • start_time: Ett valfritt TIMESTAMP eller TIMESTAMP_NTZ uttryck som visar när räknaren senast återställdes till noll. Använd den för att signalera räknaråterställningar oberoende av räknarvärdet.
  • OVER-klausul: Klausulen som beskriver fönsterintagningen.
    • Använd PARTITION BY det för att separera oberoende räknare. Typiska partitionskolumner är metriknamnet och eventuella attribut kopplade till metriken.
    • Använd ORDER BY för att definiera ordningen. Detta är vanligtvis en tidsstämpelkolumn kopplad till metriken.

Returns

Resultattypen matchar value.

Returnerar skillnaden mellan det aktuella räknarvärdet och det föregående räknarvärdet enligt ordningen definierad av ORDER BY i klausulen OVER .

Funktionen hanterar följande fall:

  • Om value är NULL, blir NULLresultatet , och raden används inte vid beräkning av skillnader för senare rader.
  • Om value är negativ, eller start_time är tidigare än föregående rads start_time, ger Azure Databricks ett fel.
  • För den första raden i partitionen är NULLresultatet .
  • Vid en räknaråterställning blir NULLresultatet .
  • Om antingen föregående eller den aktuella start_time är NULL, används inte det värdet för att upptäcka räknaråterställningar.

Azure Databricks upptäcker en räknaråterställning när någon av följande är sann:

  • Den föregående value är större än den nuvarande value.
  • start_timeges och är större än föregående rads .start_time

Du måste ange en ORDER BY-sats.

Vanliga felvillkor

Exempel

> 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