T-Digest 분위수 스케치 모듈
T-Digest 분위수 스케치 모듈
druid-tdigestsketch 확장은 T-Digest 기반의 Apache Druid 근사 스케치 집계기를 제공해요. T-Digest는 분위수(quantile)와 절단 평균(trimmed mean) 같은 순위 기반 통계를 정확하게 온라인 누적하기 위한 인기 있는 데이터 구조예요.
출처: 문서
본문
이 모듈은 T-Digest에 기반한 Apache Druid 근사 스케치 집계기를 제공해요. T-Digest (https://github.com/tdunning/t-digest)는 분위수와 절단 평균 같은 순위 기반 통계를 정확하게 온라인 누적하기 위한 인기 있는 데이터 구조예요. 이 데이터 구조는 두 개의 중간 t-digest를 쉽고 효율적으로 결합할 수 있게 해서, 분산 집계나 map reduce 작업 같은 병렬 프로그래밍 사용 사례를 위해 설계됐어요.
tDigestSketch 집계기는 원시 숫자 값에서 스케치를 생성할 수 있고, tDigestSketch 집계기 자체로 생성된 미리 생성된 T-Digest 스케치를 집계/결합할 수도 있어요. 질의 시점에 즉석에서 스케치를 생성할 수 있지만, 일반적으로 수집 시점에 스케치를 생성한 뒤 질의 시점에 결합하는 것이 더 성능이 좋아요. 이 모듈은 tDigestSketch 집계기가 만든 T-Digest 스케치에서 근사 분위수를 계산하는 postAggregator인 quantilesFromTDigestSketch도 제공해요.
이 집계기를 사용하려면 config 파일에 확장을 포함해 주세요.
druid.extensions.loadList=["druid-tdigestsketch"]
Aggregator
집계의 결과는 원시 데이터의 숫자 값을 받아들이거나 미리 생성된 T-Digest 스케치를 결합해서 만들어진 T-Digest 스케치예요.
{
"type" : "tDigestSketch",
"name" : <output_name>,
"fieldName" : <metric_name>,
"compression": <parameter that controls size and accuracy>
}
예시:
{
"type": "tDigestSketch",
"name": "sketch",
"fieldName": "session_duration",
"compression": 200
}
{
"type": "tDigestSketch",
"name": "combined_sketch",
"fieldName": <input-column>,
"compression": 200
}
| 속성 | 설명 | 필수 |
|---|---|---|
type |
이 String은 항상 "tDigestSketch"여야 해요. |
yes |
name |
계산의 출력(결과) 이름을 위한 String. | yes |
fieldName |
원시 숫자 값이나 미리 생성된 T-Digest 스케치를 담고 있는 입력 필드의 이름을 위한 String. | yes |
compression |
스케치의 정확도와 크기를 결정하는 파라미터. 높은 compression은 더 높은 정확도를 의미하지만 스케치를 저장할 공간이 더 필요해요. | no, 기본값 100 |
Post Aggregators
Quantiles
주어진 fractions 배열에 대응하는 분위수 배열을 반환해요.
{
"type" : "quantilesFromTDigestSketch",
"name": <output name>,
"field" : <post aggregator that refers to a TDigestSketch (fieldAccess or another post aggregator)>,
"fractions" : <array of fractions>
}
| 속성 | 설명 | 필수 |
|---|---|---|
type |
이 String은 항상 "quantilesFromTDigestSketch"여야 해요. |
yes |
name |
계산의 출력(결과) 이름을 위한 String. | yes |
field |
집계/결합된 T-Digest 스케치를 가리키는 필드 참조. | yes |
fractions |
0과 1 사이의 비어 있지 않은 fractions 배열. | yes |
예시:
{
"queryType": "groupBy",
"dataSource": "test_datasource",
"granularity": "ALL",
"dimensions": [],
"aggregations": [{
"type": "tDigestSketch",
"name": "merged_sketch",
"fieldName": "ingested_sketch",
"compression": 200
}],
"postAggregations": [{
"type": "quantilesFromTDigestSketch",
"name": "quantiles",
"fractions": [0, 0.5, 1],
"field": {
"type": "fieldAccess",
"fieldName": "merged_sketch"
}
}],
"intervals": ["2016-01-01T00:00:00.000Z/2016-01-31T00:00:00.000Z"]
}
quantilesFromTDigestSketch와 유사하지만 분위수 계산을 위해 단일 fraction을 받아요.
{
"type" : "quantileFromTDigestSketch",
"name": <output name>,
"field" : <post aggregator that refers to a TDigestSketch (fieldAccess or another post aggregator)>,
"fraction" : <value>
}
| 속성 | 설명 | 필수 |
|---|---|---|
type |
이 String은 항상 "quantileFromTDigestSketch"여야 해요. |
yes |
name |
계산의 출력(결과) 이름을 위한 String. | yes |
field |
집계/결합된 T-Digest 스케치를 가리키는 필드 참조. | yes |
fraction |
0과 1 사이의 십진 값. | yes |
SQL functions
T-Digest 확장을 로드하면 다음 SQL 함수를 사용할 수 있어요.
TDIGEST_GENERATE_SKETCH
표현식이 만든 값에 T-Digest 스케치를 만들어요. Compression 파라미터(기본값 100)가 스케치의 정확도와 크기를 결정해요. 높은 compression은 더 높은 정확도를 제공하지만 저장 공간이 더 필요해요.
문법:
TDIGEST_GENERATE_SKETCH(expr, [compression])
기본값: 빈 Base64 인코딩 T-Digest 스케치 문자열
함수 타입: Aggregation
TDIGEST_QUANTILE
표현식이 만든 값에 T-Digest 스케치를 만들고 해당 분위수의 값을 반환해요. Compression 파라미터(기본값 100)가 스케치의 정확도와 크기를 결정해요. 높은 compression은 더 높은 정확도를 제공하지만 저장 공간이 더 필요해요.
문법:
TDIGEST_QUANTILE(expr, quantileFraction, [compression])
기본값: Double.NaN
함수 타입: Aggregation
더 알아보기 (Learn more)
- Aggregations와 Post Aggregations 문서에서 집계 전반을 참고할 수 있어요.
- 다른 근사 분위수 스케치 확장으로 DDSketch와 MomentSketch도 살펴보세요.