DISTINCTCOUNTTHETASKETCH 함수

DISTINCTCOUNTTHETASKETCH 함수

Apache Pinot의 DISTINCTCOUNTTHETASKETCH 함수는 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와 그 확장을 활용해 고유 개수 계산과 집합 연산 평가를 수행해요.

시그니처

distinctCountThetaSketch(<thetaSketchColumn>, <thetaSketchParams>, predicate1, predicate2..., postAggregationExpressionToEvaluate) -> Long

  • thetaSketchColumn (필수): 집계할 컬럼 이름.
  • thetaSketchParams (필수): 중간 theta-sketch를 만들기 위한 세미콜론으로 구분된 파라미터 문자열.
    • 지원되는 파라미터:
    • nominalEntries: 스케치 생성에 사용되는 nominal entries. (기본 4096)
    • samplingProbability: 사전 균등 샘플링 확률 p를 설정. (기본 1.0)
    • accumulatorThreshold: 병합 전에 메모리에 유지할 스케치 수. (기본 2)
  • 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 distinctCountThetaSketch(teamID) AS value
from baseballStats 
value
149
select distinctCountThetaSketch(teamID, 'nominalEntries=10') AS value
from baseballStats
value
146

조건문과 사후 집계 표현식을 제공해 더 복잡한 카디널리티를 계산할 수도 있어요. 예를 들어 다음 두 쿼리의 교집합을 찾을 수 있어요:

select yearID
from baseballStats
where teamID = 'SFN' AND numberOfGames = 28 AND homeRuns = 1
yearID
1986
1985
select yearID
from baseballStats
where teamID = 'CHN' AND numberOfGames = 28 AND homeRuns = 1
yearID
1937
2003
1979
1900
1986
1978
2012

(1986 년도만 두 쿼리에 공통으로 존재해요)

다음 쿼리를 실행하면:

select distinctCountThetaSketch(
  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
1

더 알아보기 (Learn more)