DDSketch 근사 분위수 모듈

DDSketch 근사 분위수 모듈

druid-ddsketch 확장은 DDSketch 라이브러리를 기반으로 근사 분위수(quantile) 질의를 위한 집계기를 제공해요. 상대 오차(relative error)를 보장하는 빠르고 완전히 병합 가능한(fully-mergeable) 분위수 스케치라서, 네트워크 지연처럼 긴 꼬리(long tail) 분포의 상위 분위수를 정확히 표현하고 싶을 때 특히 유용해요.

출처: 문서

본문

이 모듈은 DDSketch 라이브러리를 사용하는 근사 분위수 질의용 집계기를 제공해요. DDSketch 라이브러리는 상대 오차를 가진 빠르고 완전히 병합 가능한 분위수 스케치를 제공해요. 진짜 분위수가 100이라면, 상대 오차 1%의 스케치는 101과 99 사이의 분위수 값을 보장해요. 긴 꼬리 분포에서는 이 동작이 중요하고 매우 가치 있어요. 이 스케치의 가장 좋은 사용처는 네트워크 지연 같은 긴 꼬리 분포의 상위 분위수를 정확하게 기술하는 것이에요.

이 Apache Druid 확장을 사용하려면 extensions load list에 포함해 주세요.

druid.extensions.loadList=["druid-ddsketch", ...]

Aggregator

집계의 결과는 원시 데이터에서 만들었거나 세그먼트에서 읽어온 모든 스케치의 합집합인 DDSketch예요. 돌려받는 단일 숫자는 포함된 총 데이터 포인트 수를 나타내요. 기본 집계기 타입인 ddSketch은 스케치를 저장하고 병합할 때 collapsingLowestDense 전략을 사용해요. 이는 가장 높은 값들을 최고 정확도로 표현하는 대신, 스케치 안의 더 낮고 작은 값들을 축소(collapse)하고 병합한다는 뜻이에요. 축소된 빈(bin)은 정확도 보장을 잃게 돼요. 기본 빈 수는 1000이에요. 스케치는 같은 relativeError 값을 사용할 때만 병합할 수 있어요.

ddSketch 집계기는 원시 데이터와 미리 계산된(precomputed) 스케치 모두에 대해 동작해요.

{
  "type" : "ddSketch",
  "name" : <output_name>,
  "fieldName" : <input_name>,
  "relativeError" : <double(0, 1)>,
  "numBins": <int>
 }
속성 설명 필수
type 반드시 "ddSketch"여야 해요. yes
name 계산의 출력(결과) 이름을 위한 String. yes
fieldName 입력 필드의 이름을 위한 String (스케치나 원시 숫자 값을 담을 수 있어요). yes
relativeError 스케치를 저장할 정밀도를 설명해요. 0과 1 사이의 숫자여야 해요. no, 기본값 0.01 (1% 오차)
numBins 스케치가 분포를 기술하는 데 사용할 총 빈 수. 최대 메모리 사용량에 직접 영향을 줘요. 사용 가능한 총 빈이 많을수록 정확한 분위수의 범위가 넓어져요. 상대 정확도 2%에서는 1밀리초와 1분 사이의 값을 커버하는 데 275개의 빈만 필요해요. 1나노초와 1일 사이의 값을 커버하려면 800개의 빈이 필요해요. no, 기본값 1000

Post Aggregators

근사 분위수를 계산하려면 quantilesFromDDSketch로 분위수 모음을 조회하거나, quantileFromDDSketch로 단일 분위수를 조회해요. ddSketch 집계기가 만든 스케치에 이 post-aggregator들을 호출하면 돼요.

quantilesFromDDSketch

여러 분위수를 가져올 때 quantilesFromDDSketch를 사용해요.

{
  "type"  : "quantilesFromDDSketch",
  "name" : <output_name>,
  "field" : <reference to DDSketch>,
  "fractions" : <array of doubles in [0,1]>
}
속성 설명 필수
type 반드시 "quantilesFromDDSketch"여야 해요. yes
name 계산의 출력(결과) 이름을 위한 String. yes
field 계산된 ddSketch. yes
fractions 계산할 분위수들의 0에서 1 사이 double 배열. yes

quantileFromDDSketch

단일 분위수를 가져올 때 quantileFromDDSketch를 사용해요.

{
  "type"  : "quantileFromDDSketch",
  "name" : <output_name>,
  "field" : <reference to DDsketch>,
  "fraction" : <double [0,1]>
}
속성 설명 필수
type 반드시 "quantileFromDDSketch"여야 해요. yes
name 계산의 출력(결과) 이름을 위한 String. yes
field 계산된 ddSketch. yes
fraction 계산할 분위수의 0에서 1 사이 double. yes

Example

수집 시점에 스케치를 미리 집계하는 질의의 예로, 수집 시 다음과 같은 집계기를 설정할 수 있어요.

{
  "type": "ddSketch",
  "name": "sketch",
  "fieldName": "value",
  "relativeError": 0.01,
  "numBins": 1000,
}

미리 집계된 스케치에서 분위수를 계산하려면 다음 집계기와 post-aggregator를 사용해요.

{
  "aggregations": [{
    "type": "ddSketch",
    "name": "sketch",
    "fieldName": "sketch",
  }],
  "postAggregations": [
  {
    "type": "quantilesFromDDSketch",
    "name": "quantiles",
    "fractions": [0.5, 0.75, 0.9, 0.99],
    "field": {
      "type": "fieldAccess",
      "fieldName": "sketch"
    }
  }]
}

더 알아보기 (Learn more)