Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:
Databricks SQL
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 opcionalTIMESTAMPouTIMESTAMP_NTZexpressã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 BYpara separar contadores independentes. Colunas típicas de partição são o nome da métrica e quaisquer atributos associados à métrica. - Use
ORDER BYpara definir a ordem. Normalmente, trata-se de uma coluna de carimbo temporal associada à métrica.
- Use
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
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. - Num reinício por contador, o resultado é
NULL. - Se o anterior ou o atual
start_timeforNULL, 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 atualvalue. -
start_timeé fornecido e é maior do que astart_timelinha anterior .
Você deve fornecer uma cláusula ORDER BY.
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
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