| 추정 함수 | 알고리즘 | 대표 함수 |
|---|---|---|
| Cardinality (고유값 개수) | HyperLogLog | APPROX_COUNT_DISTINCT |
| Similarity (유사도) | MinHash | APPROXIMATE_SIMILARITY |
| Frequency (빈도) | Space-Saving | APPROX_TOP_K |
| Percentile (백분위) | t-Digest | APPROX_PERCENTILE |
암기법: "CHSFP" → CHe SoFt P
- Cardinality–HyperLogLog
- Similarity–MinHash
- Frequency–Space-Saving
- Percentile–t-Digest
Q. distinct 개수를 추정하는 알고리즘은? → HyperLogLog
Q. 유사도 추정 알고리즘은? → MinHash
Q. 빈번한 값 추정 알고리즘은? → Space-Saving
Q. 백분위 추정 알고리즘은? → t-Digest
평균 상대 오차 = 1.62338% (이 숫자 그대로 출제됨)
COUNT(DISTINCT)는 메모리가 카디널리티에 비례 → 대용량에서 느리고 비쌈
→ 근사 함수가 훨씬 빠름 (예: 44초 vs 4분 20초)
1단계
MINHASH()→ 2단계APPROXIMATE_SIMILARITY()
교집합/합집합 계산 없이 유사도를 구하는 게 핵심
출력값은 0~1 사이 (0=다름, 1=같음)
J(A,B) = |A ∩ B| / |A ∪ B|(교집합 / 합집합)
대부분 4종 세트:
기본/_ACCUMULATE/_COMBINE/_ESTIMATE
| 추정 | 함수들 |
|---|---|
| Cardinality | HLL + _ACCUMULATE/_COMBINE/_ESTIMATE + _EXPORT/_IMPORT (★6종) |
| Frequency | APPROX_TOP_K 4종 세트 |
| Percentile | APPROX_PERCENTILE 4종 세트 |
| Similarity | 예외! MINHASH, MINHASH_COMBINE, APPROXIMATE_SIMILARITY |
암기 포인트
- HLL만
_EXPORT / _IMPORT2개 더 있음 (BINARY ↔ OBJECT 변환)- Similarity만 패턴이 다름 (ACCUMULATE/ESTIMATE 없음)
-- Cardinality
SELECT APPROX_COUNT_DISTINCT(L_ORDERKEY) FROM LINEITEM;
-- Similarity (2단계)
SELECT APPROXIMATE_SIMILARITY(MH) FROM
((SELECT MINHASH(5, C_CUSTKEY) MH FROM CUSTOMER)
UNION
(SELECT MINHASH(5, O_CUSTKEY) MH FROM ORDERS)); -- 결과: 0.8
-- Frequency → 출력: [값, 빈도]
SELECT APPROX_TOP_K(P_SIZE, 3, 100000) FROM PART;
-- Percentile → 0.8 = 80번째 백분위
SELECT APPROX_PERCENTILE(score, 0.8) FROM TEST_SCORES;