funkce analytického okna counter_diff

Platí pro:check marked yes Databricks SQL check marked yes Databricks Runtime 19.0 and above

Vypočítá rozdíly mezi po sobě jdoucími kumulativními hodnotami čítačů v časové řadě a převede kumulativní čítače do delta formátu.

Syntaxe

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Nezáporný číselný výraz, který představuje kumulativní čítač.
  • start_time: Volitelný TIMESTAMP výraz nebo TIMESTAMP_NTZ výraz, který označuje, kdy byl čítač naposledy resetován na nulu. Použijte ho k signalizaci resetování čítače nezávisle na hodnotě čítače.
  • Klauzule OVER: Klauzule, která popisuje windowing.
    • Použijte PARTITION BY k oddělení nezávislých žetonů. Typické sloupce oddílu jsou název metriky a všechny atributy spojené s metrikou.
    • Použijte ORDER BY k definování pořadí. Obvykle jde o sloupec časového razítka vázaný na tuto metriku.

Returns

Typ výsledku odpovídá value.

Vrátí rozdíl mezi aktuální hodnotou čítače a předchozí hodnotou čítače podle pořadí definovaného v ORDER BY klauzuli OVER .

Funkce řeší následující případy:

  • Pokud value je , NULLvýsledkem je NULL, a řádek se nepoužívá při výpočtu rozdílů pro pozdější řádky.
  • Pokud value je záporná start_time nebo je dříve než v předchozím řádku start_time, Azure Databricks vyvolá chybu.
  • Pro první řádek v rozkladu je NULLvýsledek .
  • Při resetování čítače je NULLvýsledek .
  • Pokud je předchozí nebo aktuální start_time , NULLtato hodnota se nepoužívá k detekci resetování čítače.

Azure Databricks detekuje reset čítače, když je pravda některá z následujících skutečností:

  • Předchozí value je větší než aktuální value.
  • start_time je dáno a je větší než předchozí řádku start_time.

Musíte zadat klauzuli ORDER BY.

Běžné chybové podmínky

Příklady

> 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