표준 SQL의 근사치 집계

이 항목은 BigQuery의 근사치 집계에 대한 개념을 설명합니다.

근사치 집계란 무엇인가요?

근사치 집계는 카디널리티와 분위수 같은 집계 함수 출력의 추정입니다. 근사치 집계는 COUNT(DISTINCT ...) 같은 일반 집계 함수에 비해 더 적은 메모리를 사용하지만, 통계상의 불확실성 또한 존재합니다. 따라서 선형 메모리 사용이 비효율적이거나 데이터가 이미 근사치인 대용량 데이터 스트림에 적합합니다. 정확한 결과가 필요하다면 정확한 집계 함수를 사용하세요. 이 주제에서는 BigQuery의 근사치 집계에 대한 개념을 설명합니다.

고정 정밀도 근사치 집계

BigQuery는 카디널리티와 분위수 추정에 필요한 고정 정밀도의 집계 함수를 지원합니다. 이러한 함수는 데이터의 중간 추정이 아닌 입력 데이터에서 바로 작동합니다. 이러한 함수에서는 추정의 정확도를 지정할 수 없습니다.

추정된 집계 값을 스케치로 저장

BigQuery는 큰 데이터세트에서 고유한 값의 수를 추정하는 데 필요한 HyperLogLog++ 카디널리티 추정 함수를 지원합니다.

이 함수는 임의의 세트를 고정 메모리 표현으로 압축하는 스케치에서 작동합니다. BigQuery는 이러한 스케치를 BYTES로 저장합니다. 스케치에서 최종 수치를 추출하기 전에 스케치를 병합하여 입력 스케치의 합집합을 나타내는 새 스케치를 생성할 수 있습니다.

예를 들어 아이스크림 맛과 그 맛을 좋아하는 사람의 수를 기록한 다음 표를 살펴보세요.

사람(명)
바닐라 3945
초콜릿 1728
딸기 2051

이 표가 집계 결과라면 표를 이용해 카디널리티를 계산하기 어려울 수도 있습니다. 하나 이상의 맛에 긍정적으로 답한 응답자가 있을 수 있으므로, 고유 응답자의 수를 알고 싶다고 해도 SUM을 이용해 People 열을 집계하지는 못합니다. 한편 기본 원시 데이터를 통해 집계 함수를 수행하면 많은 시간과 메모리가 소요될 수 있습니다.

한 가지 해결책은 원시 데이터의 근사치 집계 또는 스케치를 저장하는 것입니다. 스케치는 원시 데이터의 요약입니다. 스케치는 원시 데이터보다 메모리가 적게 필요하며 스케치에서 추정된 고유 사용자 수와 같은 추정치를 추출할 수 있습니다.

근사치 정밀도 지정

BigQuery의 스케치 기반 근사치 집계 함수를 사용하면 스케치를 생성할 때 스케치의 정밀도를 지정할 수 있습니다. 스케치의 정밀도는 스케치에서 추출할 수 있는 추정치의 정확도에 영향을 미칩니다. 정밀도가 높을수록 스케치를 처리하고 디스크에 저장하는 데 메모리가 추가로 필요하며, 스케치에서 추출한 추정치의 상대적 오류가 줄어듭니다. 생성된 스케치는 정밀도가 같은 다른 스케치와만 병합할 수 있습니다.

스케치 병합

두 개 이상의 스케치를 병합하여 다른 스케치의 기초가 되는 데이터의 합집합 추정치를 나타내는 새 스케치를 생성할 수 있습니다. HLL_COUNT.MERGE와 같은 병합 함수는 추정치를 숫자로 반환하지만 HLL_COUNT.MERGE_PARTIAL과 같은 부분 병합 함수는 새 스케치를 BYTES로 반환합니다. 부분 병합은 이미 스케치가 있는 표는 줄이고 추정치를 추출하고 싶지 않을 때 유용합니다. 예를 들어 나중에 다른 스케치와 병합할 스케치를 생성할 때 이 함수를 사용하세요.

스케치에서 추정치 추출

스케치를 저장하거나 두 개 이상의 스케치를 새 스케치에 병합했다면 HLL_COUNT.EXTRACT 등의 추출 함수를 이용해 추정된 고유 사용자 수와 같은 기본 데이터 추정치를 숫자로 반환할 수 있습니다.

알고리즘

이 섹션에서는 BigQuery가 지원하는 근사치 집계 알고리즘을 설명합니다.

HyperLogLog++

HyperLogLog++는 데이터세트의 고유한 값을 추정하기 위해 HyperLogLog 알고리즘을 개선한 알고리즘입니다. BigQuery에서 HyperLogLog++ 카디널리티 추정 함수는 이 알고리즘을 사용합니다. HyperLogLog++ 알고리즘은 바이어스 보정을 사용하여 중요한 카디널리티 범위의 오류를 줄이는 방식으로 HyperLogLog 알고리즘을 개선합니다.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.