counter_diff-Analysefensterfunktion

Gilt für:check marked yes Databricks SQL check marked yes Databricks Runtime 19.0 and above

Berechent die Unterschiede zwischen aufeinanderfolgenden kumulativen Zählern in einer Zeitreihe und wandelt kumulative Zähler in das Delta-Format um.

Syntax

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Ein nicht-negativer numerischer Ausdruck, der einen kumulativen Zähler darstellt.
  • start_time: Ein optionaler TIMESTAMP oder TIMESTAMP_NTZ Ausdruck, der angibt, wann der Zähler zuletzt auf null zurückgesetzt wurde. Nutze es, um Zähler-Zurücksetzungen unabhängig vom Zählerwert zu signalisieren.
  • OVER-Klausel: Die Klausel, die das Fenster beschreibt.
    • Nutze es, PARTITION BY unabhängige Zähler zu trennen. Typische Partitionsspalten sind der Metrikname und alle Attribute, die mit der Metrik verknüpft sind.
    • Benutze ORDER BY sie, um die Reihenfolge zu definieren. Dies ist typischerweise eine Zeitstempelspalte, die an die Metrik gebunden ist.

Gibt zurück

Der Ergebnistyp entspricht value.

Gibt die Differenz zwischen dem aktuellen Zählerwert und dem vorherigen Zähler gemäß der durch in der Klausel OVER definierten ORDER BY Reihenfolge zurück.

Die Funktion behandelt folgende Fälle:

  • Wenn value , NULList das Ergebnis NULL, und die Zeile wird bei der Berechnung von Differenzen für spätere Zeilen nicht verwendet.
  • Wenn value negativ ist oder start_time früher als die vorherige Zeile start_timeliegt, erzeugt Azure Databricks einen Fehler.
  • Für die erste Zeile in der Partition ist NULLdas Ergebnis .
  • Bei einem Counter-Reset ergibt NULLsich .
  • Wenn entweder der vorherige oder der Strom start_time ist NULL, wird dieser Wert nicht zur Erkennung von Zähler-Zurücksetzungen verwendet.

Azure Databricks erkennt einen Zähler-Zurücksetzung, wenn eines der folgenden Kriterien zutrifft:

  • Das vorherige value ist größer als das aktuelle value.
  • start_time ist angegeben und ist größer als die vorherige Zeile start_time.

Sie müssen eine ORDER BY-Klausel angeben.

Häufige Fehlerbedingungen

Beispiele

> 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