DISTINCTCOUNTSMARTHLL 함수
DISTINCTCOUNTSMARTHLL 함수
Apache Pinot의 DISTINCT_COUNT_SMART_HLL 함수는 임계값까지는 정확한 중복 제거를 하다가 임계값에 도달하면 자동으로 HyperLogLog로 전환해 근사 고유 개수를 반환해요. 정확성과 성능의 균형을 원할 때 유용해요.
출처: 문서
본문
DISTINCT_COUNT_SMART_HLL 집계 함수는 임계값(threshold)에 도달하면 값 집합을 HyperLogLog로 전환하는 스마트 고유 개수 함수예요.
시그니처
DISTINCT_COUNT_SMART_HLL(col[, params])
col(필수): 집계할 컬럼 이름.params(선택): 세미콜론으로 구분된 파라미터 키-값 쌍:threshold: 값 집합을 HyperLogLog로 전환할 임계값 (기본 100_000).log2m: HyperLogLog의 log2m (기본 12).dictThreshold: 사전 인코딩 컬럼이 RoaringBitmap 기반 중복 제거에서 직접 HyperLogLog 집계로 전환할 임계값. 고카디널리티 컬럼에서는 RoaringBitmap이 직접 HLL보다 비싸지기 때문이에요 (기본 100_000). 이 최적화를 건너뛰려면 -1 또는 INT_MAX를 사용하세요.
- 예시:
DISTINCT_COUNT_SMART_HLL(col, 'threshold=10000;log2m=8')
사용 예시
아래 예시는 Batch Quick Start를 기반으로 해요.
DISTINCTCOUNTSMARTHLL 고려 사항
- 데이터가 수집 시 미리 집계되거나 서버에서 충분한 레코드로 집계되면
DISTINCTCOUNTHLL()이DISTINCTCOUNT()보다 빨라요. 이 성능 향상은 큰 데이터셋을 비교할 때 더 커져요. - 매우 적은 레코드가 미리 집계되면 직렬화된 HLL 크기가 개별 값을 보내는 것보다 크기 때문에
DISTINCTCOUNTHLL()이DISTINCTCOUNT()만큼 빠르지 않을 수 있어요. DISTINCTCOUNTHLLPLUS()는 같은 성능으로DISTINCTCOUNTHLL()보다 더 정확한 결과를 제공해요.DISTINCTCOUNTSMARTHLL()은 임계값에 도달하면 자동으로 HLL로 전환하며 약간의 오버헤드가 있어요.