주요 컨텐츠로 이동
제품

근사치 답변, 정확한 결정: 분석을 위한 새로운 스케치 함수

Databricks의 4가지 새로운 스케치 함수로 백분위수, 고유 개수 및 상위 K개 쿼리를 몇 배 더 빠르게 실행하세요

작성자: Daniel Tenedorio, 켄트 마튼, Gengliang Wang , Chenhao Li

  • 밀리초 단위의 백분위수, 분 단위가 아님: KLL 분위수 스케치는 고정 메모리에서 대규모 데이터 세트에 걸쳐 P50, P90, P99를 계산합니다. 스케치를 저장하고 병합하여 즉각적인 증분 업데이트를 수행하세요.
  • 비용의 일부로 잠재고객 중복성: Theta 및 Tuple 스케치는 고유 값 집합에 대한 합집합, 교집합 및 차집합을 수행합니다. Tuple 스케치는 각 키에 메트릭(합계, 최소값, 최대값)을 연결하여 집계된 계산 및 집계를 수행합니다.
  • 재처리 없이 실시간 트렌딩: 근사 상위 K개 함수는 경계 메모리 내에서 가장 빈번한 항목을 식별하고 시간 창에 걸쳐 병합할 수 있습니다.
New Sketch Functions for Analytics
대규모 데이터셋은 컴팩트하고 병합 가능한 스케치로 압축되어 원시 데이터를 스캔하지 않고도 빠른 백분위수 쿼리와 집계를 지원합니다.

많은 분석 질문은 감사 목적이 아닌 의사 결정 지원을 위한 것입니다. "약 470만 고유 사용자 ±1%"를 아는 것이 "4,712,389명의 고유 사용자"를 아는 것과 동일한 결정을 내리게 한다면, 훨씬 적은 비용으로 얻는 근사치가 훨씬 좋습니다.

모든 데이터 웨어하우스에는 가장 많은 컴퓨팅 리소스를 소모하는 몇 가지 쿼리가 있습니다. 전역 정렬을 강제하는 백분위수, 모든 고유 값을 추적하는 고유 개수, 전체 데이터셋을 재정렬하는 상위 K개 랭킹입니다. Databricks는 이제 Apache DataSketches를 기반으로 구축된 네 가지 새로운 스케치 함수 제품군을 지원하여 이러한 정확한 계산을 제한된 메모리 근사치로 대체합니다. 트레이드오프는 1-2%의 구성 가능한 상대 오차입니다. 이점은 컴퓨팅 리소스를 몇 자릿수 줄이고, 원시 데이터에 접근하지 않고도 저장, 병합 및 재쿼리할 수 있는 스케치를 얻는 것입니다.

밀리초 단위의 백분위수 계산, 분 단위가 아님

10억 행 테이블에서 PERCENTILE(response_time_ms, 0.99)을 호출하면 엔진은 모든 값을 전역적으로 정렬해야 합니다. 전체 클러스터 셔플은 몇 분이 걸리고 기가바이트의 메모리를 소비할 수 있습니다. 5분마다 새로 고침되는 대시보드의 경우 이 비용을 계속 지불해야 합니다.

KLL 스케치는 분위수 질문에 답하기 위해 구축된 컴팩트하고 병합 가능한 요약입니다. 수천 개의 값을 처리하든 수조 개의 값을 처리하든 동일한 제한된 메모리를 사용하면서 이 정렬을 대체할 수 있습니다. 일반적인 상대 오차는 1-2%이며 구성 가능하며 지연 시간 모니터링, 용량 계획 및 이상 탐지에 실용적인 범위 내에 있습니다.

진정한 이점은 스케치가 가능하게 하는 워크플로우입니다. 일일 ETL 중에 한 번 구축하십시오. Delta 테이블의 열로 저장하십시오. 대시보드에서 모든 시간 범위에 대한 P50/P90/P99가 필요한 경우, 원시 데이터를 다시 스캔하는 대신 밀리초 단위로 사전 계산된 스케치를 병합하십시오. kll_get_quantile_bigint(sketch, ARRAY(0.5, 0.9, 0.99))를 사용하여 단일 스케치에서 여러 분위수를 한 번에 추출하십시오.

컴퓨팅 비용 없이 잠재고객 중복 분석

인스타그램 캠페인에서는 보지 못했지만 슈퍼볼 광고를 본 사용자는 몇 명입니까? 잠재고객 중복 분석은 마케팅 측정의 핵심입니다. 총 도달 범위(모든 캠페인을 본 사용자), 중복(여러 캠페인을 본 사용자) 및 독점 도달 범위(하나의 캠페인만 본 사용자)를 알아야 합니다. 그러나 정확한 계산에는 모든 사용자 ID를 메모리에 수집하고 잠재적으로 수십억 개의 식별자에 걸쳐 집합 연산을 수행해야 합니다. 대규모에서는 이것이 비실용적이거나 불가능해집니다.

Theta 스케치는 제한된 메모리에서 고유 값 집합을 요약하고 전체 집합 대수(합집합, 교집합, 차집합)를 지원합니다. 캠페인별로 스케치를 구축한 다음 수학적으로 결합합니다.

정확한 접근 방식은 중복 제거를 위해 UNION을 사용한 다음 중복을 찾기 위해 JOIN을 사용하고, 클러스터 전체에서 원시 사용자 ID를 두 번 셔플해야 할 수 있습니다. Theta 스케치를 사용하면 킬로바이트 단위로 측정되는 컴팩트한 이진 객체를 생성하고, 집합 연산은 마이크로초 단위로 로컬에서 수행됩니다. 이를 통해 일일 도달 범위 곡선, 증분 측정 및 교차 채널 중복 제거가 실용적으로 가능해집니다.

원시 데이터 재처리 없이 실시간 리더보드

지금 무엇이 유행하고 있습니까? 간단한 질문이지만 정확한 답은 비쌉니다. 모든 고유 값을 계산하고, 해당 개수를 모두 저장하고, 클러스터 전체에서 셔플하고, 전역적으로 정렬합니다. 검색 로그 또는 클릭 스트림과 같은 높은 카디널리티 이벤트 스트림의 경우 이는 라이브 쿼리가 아닌 배치 작업입니다.

근사치 상위 K개 스케치는 제한된 메모리에서 가장 자주 발생하는 항목을 추적하고 파티션 및 시간 창에 걸쳐 병합하여 결과를 즉시 추출할 수 있습니다. 희귀 항목은 삭제될 수 있지만, 찾고 있는 것이 아니므로 괜찮습니다.

approx_top_k_combine을 사용하면 "이번 주 트렌드" 대시보드는 수십억 개의 원시 이벤트를 다시 스캔하는 대신 사전 계산된 168개의 스케치를 병합하는 것이 됩니다. 스트리밍 워크로드의 경우 각 마이크로 배치의 스케치를 실행 합계로 병합하고 실시간으로 결과를 표시합니다. 한때 배치 작업이었던 것이 라이브 리더보드가 됩니다.

한 번의 패스로 카디널리티 및 수익 기여도 계산

고유 고객 수를 세는 것은 하나의 쿼리입니다. 그들의 수익을 합산하는 것은 또 다른 쿼리입니다. 여러 기간에 걸쳐 나타나는 고객을 이중으로 계산하지 않고 둘 다 올바르게 수행하는 것이 과제입니다.

일반적인 분석 질문을 생각해 보십시오. "이번 달에 구매한 고유 고객은 몇 명이며, 지역별 총 수익은 얼마입니까?" 일반적으로 대규모 GROUP BY로 시작하여 수십억 건의 거래에 걸쳐 구매를 합산하면서 고객 ID를 중복 제거합니다. 그리고 이전 결과를 단순히 더할 수 없습니다. 두 기간 모두에 나타나는 고객은 이중으로 계산되고 수익은 과대평가됩니다.

Tuple 스케치는 단일 병합 가능한 구조에서 고유 개수와 메트릭 집계를 결합하여 이 문제를 해결합니다.

각 스케치는 고유 고객과 집계된 지출을 매핑합니다. 일별로 병합하면 고객 수가 자동으로 중복 제거되고 수익 합계가 누적됩니다. 정확한 증분 계산은 데이터 범위가 변경될 때마다 원시 데이터에서 다시 처리해야 합니다.

올바른 스케치로 시작하기

함수 제품군

사용 사례

KLL 분위수 스케치

백분위수 (P50, P90, P99)

Theta 스케치

고유 값에 대한 집합 연산

근사치 상위 K개

가장 빈번한 항목

Tuple 스케치

고유 개수 및 메트릭 집계

언제 스케치를 사용해야 할까요?: 대시보드, 추세 분석, 모니터링, 마케팅 기여 분석 등 근사치가 허용되는 모든 쿼리에 사용하세요. 데이터 세트가 클수록 더 좋습니다. 어떤 스케치를 사용해야 할지 확실하지 않다면 Genie Code에 문의하여 올바른 선택을 하도록 도움을 받으세요.

언제 정확해야 할까요?: 재무 감사, 규정 준수 보고 또는 규제 또는 비즈니스 요구 사항이 정확한 값을 요구하는 모든 사용 사례에 사용하세요.

이 네 가지 함수 제품군은 장기 실행 쿼리를 웨어하우스에서 가장 저렴한 쿼리로 변환합니다. ETL 중에 스케치를 한 번 빌드하고 Delta에 저장한 다음 읽을 때 병합하세요. 감사자가 요청할 때 원시 데이터는 여전히 존재합니다. 다른 모든 경우에는 1%의 오차 범위와 1000배의 속도 향상이 환영할 만한 절충안입니다.

모든 함수는 SQL, DataFrame 및 Structured Streaming 파이프라인에서 작동합니다. Spark에서 생성된 스케치는 Apache DataSketches 생태계의 다른 시스템과 상호 운용 가능합니다. 함수 시그니처 및 예제는 설명서(1, 2, 3, 4)를 참조하고 오늘 스케치 사용을 시작하세요.

Apache Spark에 Theta 스케치 및 Tuple 스케치 함수 제품군을 구현하고 기여한 Christopher Boumalhab(GitHub의 cboumalh)에게 특별히 감사드립니다.

(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)

최신 게시물을 이메일로 받아보세요

블로그를 구독하고 최신 게시물을 이메일로 받아보세요.