DISTINCTCOUNTRAWTHETASKETCH 함수
DISTINCTCOUNTRAWTHETASKETCH 함수
Apache Pinot의 DISTINCTCOUNTRAWTHETASKETCH 함수는 직렬화된(Hex 인코딩) Theta Sketch를 반환해요. Theta Sketch 프레임워크는 데이터 스트림에 대한 집합 연산을 가능하게 하고 카디널리티(고유 개수) 추정에도 사용할 수 있어요. Pinot은 라이브러리 org.apache.datasketches:datasketches-java:4.2.0의 Sketch Class와 그 확장을 이용해 고유 개수 계산과 집합 연산 평가를 수행해요.
출처: 문서
본문
Theta Sketch 프레임워크는 데이터 스트림에 대한 집합 연산을 가능하게 하고 카디널리티 추정에도 사용될 수 있어요. Pinot은 라이브러리 org.apache.datasketches:datasketches-java:4.2.0의 Sketch Class와 그 확장을 활용해 고유 개수 계산과 집합 연산 평가를 수행해요.
시그니처
distinctCountRawThetaSketch(<thetaSketchColumn>, <thetaSketchParams>, predicate1, predicate2..., postAggregationExpressionToEvaluate) -> HexEncoded
thetaSketchColumn(필수): 집계할 컬럼 이름.thetaSketchParams(필수): 중간 theta-sketch를 만들기 위한 세미콜론으로 구분된 파라미터 문자열.- 지원되는 파라미터:
nominalEntries: 스케치 생성에 사용되는 nominal entries. (기본 4096)samplingProbability: 사전 균등 샘플링 확률 p를 설정. (기본 1.0)accumulatorThreshold: 병합 전에 메모리에 유지할 스케치 수. (기본 2)- 현재 지원되는 파라미터는
nominalEntries뿐이에요 (기본 4096).
predicates(선택):where절에서 선택된 행에 적용되는lhs <op> rhs형태의 개별 조건문. 중간 스케치 집계 중에는 이런 조건문을 만족하는thetaSketchColumn의 스케치가 각각 개별적으로 합집합 처리돼요. 예를 들어country=USA에 해당하는 모든 필터링된 행은 단일 스케치로 union 처리돼요. 개별 조건문을 AND/OR로 결합한 복잡한 조건문도 지원돼요.postAggregationExpressionToEvaluate(필수): 각 조건문에 대한 개별 중간 스케치에 수행할 집합 연산. 현재 지원되는 연산은SET_DIFF, SET_UNION, SET_INTERSECT이며, DIFF는 두 인자를 요구하고 UNION/INTERSECT는 두 개 이상의 인자를 허용해요.
사용 예시
아래 예시는 Batch Quick Start를 기반으로 해요.
select distinctCountRawThetaSketch(teamID) AS value
from baseballStats
| value |
|---|
| AgMDAAAKzJOVAAAAAACAPwDAATj... |
select distinctCountRawThetaSketch(teamID, 'nominalEntries=10') AS value
from baseballStats
| value |
|---|
| AwMDAAAKzJMQAAAAAACAP4vpfPBbbQsO5N1zYV2c... |
조건문과 사후 집계 표현식을 제공해 더 복잡한 카디널리티를 계산할 수도 있어요:
select distinctCountRawThetaSketch(
yearID,
'nominalEntries=4096',
'teamID = ''SFN'' AND numberOfGames=28 AND homeRuns=1',
'teamID = ''CHN'' AND numberOfGames=28 AND homeRuns=1',
'SET_INTERSECT($1, $2)'
) AS value
from baseballStats
| value |
|---|
| AQMDAAA6zJN8QPYIsvHMNQ== |