uniqCombined64
도입 버전: v20.1.0
서로 다른 인수 값의 대략적인 개수를 계산합니다.
uniqCombined와 동일하지만, String 데이터 타입에만 적용하는 대신 모든 데이터 타입에 64비트 해시를 사용합니다.
이 함수는 결정론적인 결과를 제공합니다(쿼리 처리 순서에 따라 달라지지 않습니다).
uniq 함수와 비교하면, uniqCombined64 함수는 다음과 같은 특징이 있습니다:
- 메모리를 몇 배 더 적게 사용합니다
- 몇 배 더 높은 정확도로 계산합니다
구현 세부 사항
이 함수는 집계의 모든 매개변수에 대해 모든 데이터 타입의 64비트 해시를 계산한 다음, 이를 계산에 사용합니다. 오류 보정 테이블이 포함된 배열, 해시 테이블, HyperLogLog의 세 가지 알고리즘을 조합해 사용합니다:
- 고유한 원소 수가 적을 때는 배열을 사용합니다
- 집합 크기가 더 커지면 해시 테이블을 사용합니다
- 원소 수가 더 많아지면 HyperLogLog를 사용하며, 이 경우 고정된 양의 메모리를 차지합니다
구문
uniqCombined64(HLL_precision)(x[, ...])
uniqCombined64(x[, ...])매개변수
HLL_precision— 선택 사항입니다. HyperLogLog의 셀 수에 대한 밑이 2인 로그값입니다. 기본값은 17이며, 이는 사실상 96 KiB의 공간(2^17개 셀, 각 6비트)에 해당합니다. 범위: [12, 20].UInt8
인수
x— 개수가 가변적인 인수입니다.Tuple(T)또는Array(T)또는Date또는DateTime또는String또는(U)Int*또는Float*또는Decimal
반환 값
서로 다른 인수 값의 대략적인 개수를 나타내는 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 │
└────────────────────────┘
┌─uniqCombined(number)─┐
│ 5545308725 │
└──────────────────────┘관련 항목