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==

더 알아보기 (Learn more)