Función de ventana analítica counter_diff

Se aplica a:check marcado yes Comprobación de SQL de Databricks marcada como sí Databricks Runtime 19.0 y versiones posteriores

Calcula las diferencias entre valores acumulativos consecutivos de contadores en una serie temporal, convirtiendo contadores acumulados a formato delta.

Syntax

counter_diff( value [, start_time] ) OVER clause

Arguments

  • value: Una expresión numérica no negativa que representa un contador acumulativo.
  • start_time: Un opcional TIMESTAMP u TIMESTAMP_NTZ expresión que indica cuándo el contador se restableció por última vez a cero. Úsala para señalar que el contador se reinicia independientemente del valor del contador.
  • Cláusula OVER: La cláusula que describe la ventana.
    • Úsalo PARTITION BY para separar fichas independientes. Las columnas típicas de partición son el nombre de la métrica y cualquier atributo vinculado a la métrica.
    • Úsalo ORDER BY para definir el orden. Normalmente es una columna de marca de tiempo vinculada a la métrica.

Devoluciones

El tipo del resultado coincide con el de value.

Devuelve la diferencia entre el valor actual del contador y el valor anterior del contador según el orden definido por ORDER BY en la OVER cláusula.

La función gestiona los siguientes casos:

  • Si value es NULL, el resultado es NULL, y la fila no se utiliza al calcular diferencias para filas posteriores.
  • Si value es negativo, o start_time es anterior a la fila start_timeanterior, Azure Databricks genera un error.
  • Para la primera fila de la partición, el resultado es NULL.
  • En un reinicio contador, el resultado es NULL.
  • Si el anterior o el actual start_time es NULL, ese valor no se utiliza para detectar reinicios de contadores.

Azure Databricks detecta un reinicio contador cuando cualquiera de los siguientes casos es cierto:

  • El anterior value es mayor que el actual value.
  • start_time se proporciona y es mayor que la fila start_timeanterior .

Debe proporcionar una ORDER BY cláusula.

Condiciones de error comunes

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