본문으로 바로가기
본문으로 바로가기

uniqCombined

uniqCombined

도입 버전: v1.1

서로 다른 인자 값의 대략적인 개수를 계산합니다. 쿼리 처리 순서에 의존하지 않는, 결정론적인 방식으로 결과를 반환합니다.

참고

String 이외의 타입에 대해 32비트 해시를 사용하므로, 카디널리티가 UINT_MAX보다 크게 증가하면 결과 오차가 매우 커집니다(수십억~수백억 개 수준의 서로 다른 값 이후부터 오차가 빠르게 증가합니다). 카디널리티가 UINT_MAX를 초과하는 경우에는 uniqCombined64를 대신 사용해야 합니다.

uniq 함수와 비교했을 때, uniqCombined 함수는 다음과 같습니다.

  • 메모리를 몇 배 적게 사용합니다.
  • 정확도가 몇 배 더 높습니다.
  • 일반적으로는 성능이 약간 더 낮습니다. 다만, 네트워크를 통해 많은 수의 집계 상태를 전송하는 분산 쿼리와 같은 시나리오에서는 uniq보다 uniqCombined가 더 나은 성능을 보일 수 있습니다.
Details

구현 세부 정보 이 함수는 집계에 포함된 모든 인자에 대해 해시(String에는 64비트 해시, 그 외에는 32비트 해시)를 계산한 다음, 이를 사용해 계산을 수행합니다. 배열, 해시 테이블, 오류 보정 테이블을 사용하는 HyperLogLog의 세 가지 알고리즘을 조합해서 사용합니다.

  • 서로 다른 요소의 개수가 적을 때는 배열을 사용합니다.
  • 집합의 크기가 더 커지면 해시 테이블을 사용합니다.
  • 요소의 개수가 더 많아지면 HyperLogLog를 사용하며, 이 경우 고정된 양의 메모리만을 사용합니다.

문법

uniqCombined(HLL_precision)(x[, ...])
uniqCombined(x[, ...])

매개변수

  • HLL_precision — 옵션입니다. HyperLogLog에서 셀 개수의 밑이 2인 로그값입니다. 기본값은 17이며, 이는 사실상 96 KiB의 공간(2^17개의 셀, 각 6비트)에 해당합니다. 범위: [12, 20]. UInt8

인수

반환 값

서로 다른 인수 값의 대략적인 개수를 나타내는 UInt64 타입 숫자를 반환합니다. UInt64

예시

기본 사용법

SELECT uniqCombined(number) FROM numbers(1e6);
┌─uniqCombined(number)─┐
│              1001148 │
└──────────────────────┘

사용자 정의 정밀도 사용

SELECT uniqCombined(15)(number) FROM numbers(1e5);
┌─uniqCombined(15)(number)─┐
│                   100768 │
└──────────────────────────┘

함께 보기