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)