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

uniqCombined64

uniqCombined64

도입 버전: v20.1

서로 다른 인수 값의 개수를 근사치로 계산합니다. uniqCombined와 동일하지만, String 데이터 타입에만 64비트 해시를 사용하는 대신 모든 데이터 타입에 대해 64비트 해시를 사용합니다.

이 함수는 결과가 결정적입니다(쿼리 처리 순서에 의존하지 않습니다).

참고

모든 타입에 64비트 해시를 사용하므로, String이 아닌 타입에 32비트 해시를 사용하는 uniqCombined와 달리, UINT_MAX보다 훨씬 큰 카디널리티에서 매우 큰 오차가 발생하지 않습니다.

uniq 함수와 비교하면, uniqCombined64 함수는 다음과 같은 특징이 있습니다:

  • 메모리를 몇 배 더 적게 사용합니다
  • 몇 배 더 높은 정확도로 계산합니다
Details

구현 세부 사항 이 함수는 집계의 모든 인자에 대해 64비트 해시를 계산한 뒤, 이를 사용하여 계산을 수행합니다. 배열, 해시 테이블, HyperLogLog 세 가지 알고리즘을 조합하며, 오류 보정 테이블을 함께 사용합니다:

  • 서로 다른 원소의 수가 적을 때는 배열을 사용합니다
  • 집합 크기가 더 커지면 해시 테이블을 사용합니다
  • 더 많은 원소에 대해서는 HyperLogLog를 사용하며, 이는 고정된 양의 메모리를 점유합니다

문법

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

매개변수

  • HLL_precision — 선택 매개변수입니다. HyperLogLog에서 셀 개수의 2를 밑으로 하는 로그 값입니다. 기본값은 17이며, 이는 실질적으로 96 KiB 공간입니다(2^17개 셀, 각 6비트). 범위: [12, 20]. UInt8

인수

반환 값

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

예시

대규모 데이터셋 예시

SELECT uniqCombined64(number) FROM numbers(1e10);
┌─uniqCombined64(number)─┐
│             9998568925 │
└────────────────────────┘

uniqCombined와 비교

-- uniqCombined64 with large dataset
SELECT uniqCombined64(number) FROM numbers(1e10);

-- uniqCombined with same dataset shows poor approximation
SELECT uniqCombined(number) FROM numbers(1e10);
┌─uniqCombined64(number)─┐
│             9998568925 │ -- 10.00 billion
└────────────────────────┘
┌─uniqCombined(number)─┐
│           5545308725 │ -- 5.55 billion
└──────────────────────┘

함께 보기