counter_diff analitikai ablakfüggvény

A következőre vonatkozik:yes Databricks SQL check mark yes Databricks Runtime 19.0 és újabb

Számolja ki az egymást követő kumulatív számláló értékek különbségeit egy idősorban, az összesített számlálókat delta formátumra alakítva.

Szemantika

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Egy nemnegatív numerikus kifejezés, amely egy kumulatív számlálót képvisel.
  • start_time: Egy opcionális TIMESTAMP vagy TIMESTAMP_NTZ kifejezés, amely jelzi, mikor állították vissza utoljára a számlálót nullára. Használd arra, hogy jelezd a számláló visszaállítását függetlenül a számláló értéktől.
  • OVER záradék: Az a záradék, amely leírja az ablakozást.
    • Használd PARTITION BY az önálló számlálók szétválasztására. A tipikus partíciós oszlopok a metrika neve és az ehhez kapcsolódó attribútumok.
    • A sorrend meghatározására használjuk ORDER BY . Ez általában egy időbélyegoszlop, amely a metrikához van kötve.

Returns

Az eredmény típusa megegyezik value.

Visszaadja a jelenlegi számláló és az előző számláló érték közötti különbséget a záradékban OVER meghatározott ORDER BY sorrend szerint.

A függvény a következő eseteket kezeli:

  • Ha value az NULL, az eredmény NULL, és a sor nem kerül felhasználásra a későbbi sorok különbségeinek számításakor.
  • Ha value negatív, vagy start_time korábban van az előző sornálstart_time, akkor az Azure Databricks hibát ad ki.
  • A partíció első sorára az eredmény: NULL.
  • Egy számláló visszaállításnál az eredmény .NULL
  • Ha az előző vagy az áram start_time , NULLez az érték nem a számláló visszaállítások észlelésére.

Az Azure Databricks akkor érzékel egy számláló visszaállítást, ha az alábbiak közül bármelyik igaz:

  • Az előző value nagyobb, mint a jelenlegi value.
  • start_time megadva van, és nagyobb, mint az előző sorok start_time.

Önnek meg kell adnia egy ORDER BY záradékot.

Gyakori hibafeltételek

Példák

> 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