estdc()
HyperLogLog 알고리즘을 사용하여 그룹 내 고유값 수의 근사치를 계산합니다.
estdcount는 estdc의 별칭입니다.
문법
매개변수
EXPR- 고유값을 셀 필드를 반환하는 표현식.
BITS- (선택) HyperLogLog 정밀도 비트 수. 4에서 24 사이의 정수이며 기본값은
16입니다. 비트 수가 높을수록 정확도가 높아지지만 메모리 사용량도 증가합니다.
설명
estdc() 함수는 그룹 내 레코드를 처리하면서 EXPR이 반환하는 값을 HyperLogLog 확률적 자료구조에 누적합니다. null 값은 처리하지 않습니다. 집계가 완료되면 고유값 수의 근사치를 64비트 정수(long)로 반환합니다.
HyperLogLog는 소량의 메모리만 사용하면서 대규모 데이터셋의 고유값 수를 빠르게 추정합니다. 기본 정밀도 비트 수 16에서는 표준 오차가 약 0.8%입니다. 정확한 고유값 수가 필요한 경우에는 dc() 함수를 사용하세요.
숫자 타입에 대해서는 Java SDK의 기본 hashCode()가 범위 내 숫자에서 비트 편향을 유발하는 문제를 방지하기 위해 Google MurmurHash3 알고리즘으로 재해시합니다.
stats, timechart 등 집계 명령어에서만 사용할 수 있습니다.
BITS 값에 따라 그룹당 메모리 사용량이 달라집니다. 정밀도 비트 수 b일 때 레지스터 배열 크기는 2^b 바이트입니다. 기본값 16에서는 그룹당 최대 64KB를 사용합니다. BITS를 높이면 정확도가 향상되지만 메모리 사용량도 함께 늘어납니다.
오류 코드
| 코드 | 설명 |
|---|---|
| 91020 | 인자 수가 올바르지 않습니다. |
| 91050 | BITS 매개변수가 4~24 범위의 정수가 아닙니다. |
사용 예
이 사용 예에서 조회하는 WEB_APACHE_SAMPLE 테이블을 준비하려면 쿼리 실습용 데이터를 참고하세요.
-
고유 출발지 IP 수 추정 (기본 정밀도)
table WEB_APACHE_SAMPLE | stats estdc(src_ip) -
정밀도를 높여 고유 출발지 IP 수 추정
table WEB_APACHE_SAMPLE | stats estdc(src_ip, 20) -
null 값 처리
json "[{'val': 10}, {'val': null}, {'val': 30}]" | stats estdc(val) | # null 값은 집계에서 제외됩니다.
호환성
estdc() 함수는 로그프레소 소나 4.0 이전부터 제공되었습니다.