Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Função de janela analítica
Aplica-se a:
Databricks SQL
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 opcionalTIMESTAMPouTIMESTAMP_NTZexpressã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 BYpara separar contadores independentes. Colunas típicas de partição são o nome da métrica e quaisquer atributos ligados à métrica. - Use
ORDER BYpara definir a ordem. Normalmente, é uma coluna de carimbo de tempo vinculada à métrica.
- Use
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
valueforNULL, o resultado éNULL, e a linha não é usada ao calcular diferenças para linhas posteriores. - Se
valuefor negativo, oustart_timefor anterior à linhastart_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_timeforNULL, 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 atualvalue. -
start_timeé fornecido e é maior que a linhastart_timeanterior .
Você deve fornecer uma ORDER BY cláusula.
Condições de erro comuns
- COUNTER_DIFF_NEGATIVE_COUNTER_VALUE
- COUNTER_DIFF_START_TIME_DECREASED
- 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