Função de janela analítica counter_diff

Aplica-se a:check marked yes Databricks SQL check marked yes Databricks Runtime 19.0 and above

Calcula as diferenças entre valores cumulativos consecutivos de contadores em uma série temporal, convertendo contadores cumulativos para o 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 resetado pela última vez para zero. Use isso para sinalizar que o contador reinicia 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 ligados à métrica.
    • Use ORDER BY para definir a ordem. Normalmente, é uma coluna de carimbo de tempo vinculada à métrica.

Returns

O tipo de resultado corresponde a value.

Retorna 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 lida com 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.
  • Em um reinício contador, o resultado é NULL.
  • Se o anterior ou o atual start_time for NULL, esse valor não é usado para detectar resetes de contador.

O Azure Databricks detecta um reset de contador quando qualquer um dos seguintes casos é verdadeiro:

  • O anterior value é maior que o atual value.
  • start_time é fornecido e é maior que a linha start_timeanterior .

Você deve fornecer uma ORDER BY cláusula.

Condições de erro comuns

Examples

> 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