counter_diff função de janela analítica

Aplica-se a:com visto sim Databricks SQL marcado sim Databricks Runtime 19.0 e superiores

Calcula as diferenças entre valores cumulativos consecutivos de contadores numa série temporal, convertendo contadores cumulativos para formato delta.

Syntax

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Uma expressão numérica não negativa que representa um contador cumulativo.
  • start_time: Um opcional TIMESTAMP ou TIMESTAMP_NTZ expressão que indica quando o contador foi reiniciado pela última vez a zero. Use-o para sinalizar reinicios do contador independentemente do valor do contador.
  • Cláusula OVER: A cláusula que descreve a janela.
    • Use PARTITION BY para separar contadores independentes. Colunas típicas de partição são o nome da métrica e quaisquer atributos associados à métrica.
    • Use ORDER BY para definir a ordem. Normalmente, trata-se de uma coluna de carimbo temporal associada à métrica.

Returns

O tipo de resultado corresponde a value.

Devolve a diferença entre o valor atual do contador e o valor anterior do contador de acordo com a ordem definida por ORDER BY na OVER cláusula.

A função trata os seguintes casos:

  • Se value for NULL, o resultado é NULL, e a linha não é usada ao calcular diferenças para linhas posteriores.
  • Se value for negativo, ou start_time for anterior à linha start_timeanterior , o Azure Databricks gera um erro.
  • Para a primeira linha da partição, o resultado é NULL.
  • Num reinício por contador, o resultado é NULL.
  • Se o anterior ou o atual start_time for NULL, esse valor não é usado para detetar resets de contadores.

O Azure Databricks deteta um reinício contador quando algum dos seguintes casos é verdadeiro:

  • O anterior value é maior do que o atual value.
  • start_time é fornecido e é maior do que a start_timelinha anterior .

Você deve fornecer uma cláusula ORDER BY.

Condições de erro comuns

Exemplos

> 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