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)
- Aggregations와 Post Aggregations 문서에서 집계 전반을 참고할 수 있어요.
- 다른 근사 분위수 스케치 확장으로 T-Digest와 MomentSketch도 살펴보세요.