Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Función de ventana analítica
Se aplica a:
Comprobación de SQL de Databricks
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 opcionalTIMESTAMPuTIMESTAMP_NTZexpresió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 BYpara 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 BYpara definir el orden. Normalmente es una columna de marca de tiempo vinculada a la métrica.
- Úsalo
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
valueesNULL, el resultado esNULL, y la fila no se utiliza al calcular diferencias para filas posteriores. - Si
valuees negativo, ostart_timees anterior a la filastart_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_timeesNULL, 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
valuees mayor que el actualvalue. -
start_timese proporciona y es mayor que la filastart_timeanterior .
Debe proporcionar una ORDER BY cláusula.
Condiciones de error comunes
- COUNTER_DIFF_NEGATIVE_COUNTER_VALUE
- CONTADOR_DIFERENCIA_HORA_DE_INICIO_DISMINUIDA
- WINDOW_FUNCTION_WITHOUT_OVER_CLAUSE
- WINDOW_FUNCTION_FRAME_NOT_ORDERED
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