counter_diff 분석 창 함수

적용 대상:yes 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보다 큽니다.

절을 제공해야 합니다.

일반적인 오류 조건

예제

> 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