본문으로 바로가기
본문으로 바로가기

quantilesTimingIf

설명

If 결합자(combinator)는 quantilesTiming 함수에 적용하여, 조건이 참인 행의 타이밍 값에 대한 분위수를 quantilesTimingIf 집계 결합자 함수를 사용해 계산합니다.

사용 예시

이 예제에서는 서로 다른 엔드포인트의 API 응답 시간을 저장하는 테이블을 생성하고, 성공한 요청의 응답 시간 분위수를 계산하기 위해 quantilesTimingIf를 사용합니다.

CREATE TABLE api_responses(
    endpoint String,
    response_time_ms UInt32,
    is_successful UInt8
) ENGINE = Log;

INSERT INTO api_responses VALUES
    ('orders', 82, 1),
    ('orders', 94, 1),
    ('orders', 98, 1),
    ('orders', 87, 1),
    ('orders', 103, 1),
    ('orders', 92, 1),
    ('orders', 89, 1),
    ('orders', 105, 1),
    ('products', 45, 1),
    ('products', 52, 1),
    ('products', 48, 1),
    ('products', 51, 1),
    ('products', 49, 1),
    ('products', 53, 1),
    ('products', 47, 1),
    ('products', 50, 1),
    ('users', 120, 0),
    ('users', 125, 0),
    ('users', 118, 0),
    ('users', 122, 0),
    ('users', 121, 0),
    ('users', 119, 0),
    ('users', 123, 0),
    ('users', 124, 0);

SELECT
    endpoint,
    quantilesTimingIf(0, 0.25, 0.5, 0.75, 0.95, 0.99, 1.0)(response_time_ms, is_successful = 1) as response_time_quantiles
FROM api_responses
GROUP BY endpoint;

quantilesTimingIf FUNCTION은 성공한 요청(is_successful = 1)에 대해서만 분위수를 계산합니다. 반환되는 배열에는 다음 분위수가 순서대로 포함됩니다.

  • 0 (최솟값)
  • 0.25 (제1 사분위수)
  • 0.5 (중앙값)
  • 0.75 (제3 사분위수)
  • 0.95 (제95 백분위수)
  • 0.99 (제99 백분위수)
  • 1.0 (최댓값)
   ┌─endpoint─┬─response_time_quantiles─────────────────────────────────────────────┐
1. │ orders   │ [82, 87, 92, 98, 103, 104, 105]                                     │
2. │ products │ [45, 47, 49, 51, 52, 52, 53]                                        │
3. │ users    │ [nan, nan, nan, nan, nan, nan, nan]                                 │
   └──────────┴─────────────────────────────────────────────────────────────────────┘

같이 보기