적용 대상:
Databricks SQL
Databricks Runtime 19.0 이상으로 표시
연속된 누적 카운터 값 간의 차이를 시간 시계열 내에서 계산하여 누적 카운터를 델타 형식으로 변환합니다.
구문
counter_diff( value [, start_time] ) OVER clause
Arguments
-
value: 누적 카운터를 나타내는 음수가 아닌 숫자 표현식입니다. -
start_time: 카운터가 마지막으로 0으로 초기화된 시점을 나타내는 선택적TIMESTAMPTIMESTAMP_NTZ표현식입니다. 카운터 값과 독립적으로 카운터 리셋을 신호하는 데 사용하세요. -
오버 조항: 윈도우잉을 설명하는 조항입니다.
- 독립적인 카운터를 분리하는 데 사용
PARTITION BY하세요. 일반적인 파티션 열은 메트릭 이름과 메트릭에 연결된 속성입니다. - 순서를 정의하는 데 사용
ORDER BY하세요. 이는 보통 메트릭에 연동된 타임스탬프 열입니다.
- 독립적인 카운터를 분리하는 데 사용
Returns
결과 형식이 value과 일치합니다.
절에서 OVER 정의 ORDER BY 된 순서에 따라 현재 카운터 값과 이전 카운터 값의 차이를 반환합니다.
이 함수는 다음과 같은 경우를 처리합니다:
-
value만약 가 이라NULL면, 결과는NULL이며, 이후 행의 차이를 계산할 때는 해당 행이 사용되지 않는다. -
value만약 음start_time수이거나 이전 행start_time보다 앞선 경우, Azure Databricks는 오류를 발생시킵니다. - 파티션의 첫 번째 행에 대한 결과
NULL는 입니다. - 카운터 리셋 시 결과
NULL는 입니다. - 이전 값이나 전류
start_time중 하나가 라면NULL그 값은 카운터 리셋을 감지하는 데 사용되지 않습니다.
Azure Databricks는 다음 조건 중 하나가 참일 때 카운터 초기화를 감지합니다:
- 이전
value값이 현재value값보다 큽니다. -
start_time는 제공되며, 앞선 행들start_time보다 큽니다.
일반적인 오류 조건
- COUNTER_DIFF_NEGATIVE_COUNTER_VALUE
- 카운터 차이 시작 시간이 감소됨
- WINDOW_FUNCTION_WITHOUT_OVER_CLAUSE
- WINDOW_FUNCTION_FRAME_NOT_ORDERED
예제
> 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