HLL_ACCUMULATE
HLL_ACCUMULATE
집계가 끝날 때의 HyperLogLog 상태를 반환해요.
HyperLogLog에 대한 자세한 내용은 고유 값 수 추정(Estimating the Number of Distinct Values) 문서를 참고해요.
HLL은 최종 카디널리티 추정치가 반환될 때 중간 상태를 버려요. 벌크 로딩 중 증분 카디널리티 추정과 같은 고급 사용 사례에서는 중간 상태를 유지하고 싶을 수 있어요. 중간 상태는 나중에 다른 중간 상태와 결합(병합)되거나 외부 도구로 내보낼 수 있어요.
HLL과 달리 HLL_ACCUMULATE는 카디널리티 추정치를 반환하지 않아요. 대신 최종 추정 단계를 건너뛰고 알고리즘 상태 자체를 반환해요. 이 상태는 최대 4096바이트의 이진 값이에요. 자세한 내용은 고유 값 수 추정 문서를 참고해요.
본문
참고 항목: HLL_COMBINE, HLL_ESTIMATE
구문 (Syntax)
집계 함수 (Aggregate):
HLL_ACCUMULATE( [ DISTINCT ] )
HLL_ACCUMULATE(*)
윈도우 함수 (Window):
HLL_ACCUMULATE( [ DISTINCT ] ) OVER ( [ PARTITION BY ] )
HLL_ACCUMULATE(*) OVER ( [ PARTITION BY ] )
OVER 절에 대한 자세한 내용은 윈도우 함수 구문 및 사용(window function syntax and usage) 문서를 참고해요.
인자 (Arguments)
expr— 카디널리티(고유 값 수)를 추정하려는 표현식이에요. 일반적으로 컬럼 이름이지만 더 일반적인 표현식일 수도 있어요.
사용 노트 (Usage Notes)
- 이 함수는 집계 함수 또는 윈도우 함수로 사용할 수 있어요.
- DISTINCT는 문법적으로 지원되지만 효과는 없어요.
예제 (Examples)
캐나다의 주(들)에서 고유 우편번호 수를 추정하는 한 단계를 보여줘요. 이 단계에서 매니토바의 대략적인 고유 우편번호 수를 계산하고 계산의 "상태" 내부 표현을 저장하는데, 이후 다른 주들의 유사한 정보와 결합할 수 있어요:
CREATE TABLE temporary_hll_state_for_manitoba AS
SELECT HLL_ACCUMULATE(postal_code) AS h_a_p_c
FROM postal_data
WHERE province = 'Manitoba';
또 다른 예제예요. 이 예제는 세 가지 관련 함수 HLL_ACCUMULATE, HLL_ESTIMATE, HLL_COMBINE을 사용하는 방법을 보여줘요.
간단한 테이블과 데이터 생성:
CREATE OR REPLACE SEQUENCE seq92;
CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq92.nextval, dummy SMALLINT);
INSERT INTO sequence_demo (dummy) VALUES (0);
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
INSERT INTO sequence_demo (dummy) SELECT dummy FROM sequence_demo;
sequence_demo라는 테이블의 현재 대략적인 카디널리티 정보를 나타내는 "상태"를 포함하는 테이블 생성:
CREATE OR REPLACE TABLE resultstate1 AS (
SELECT HLL_ACCUMULATE(c1) AS rs1
FROM sequence_demo);
이제 두 번째 테이블을 만들고 데이터를 추가해요. (더 현실적인 상황에서는 사용자가 첫 번째 테이블에 더 많은 데이터를 로드하고 데이터가 로드된 시간을 기준으로 데이터를 겹치지 않는 집합으로 나눴을 수 있어요.)
CREATE OR REPLACE TABLE test_table2 (c1 INTEGER);
INSERT INTO test_table2 (c1) SELECT c1 + 4 FROM sequence_demo;
새 데이터에 대한 "상태" 정보를 가져와요.
CREATE OR REPLACE TABLE resultstate2 AS
(SELECT HLL_ACCUMULATE(c1) AS rs1
FROM test_table2);
두 행 배치의 "상태" 정보를 결합:
CREATE OR REPLACE TABLE combined_resultstate (c1) AS
SELECT HLL_COMBINE(rs1) AS apc1
FROM (
SELECT rs1 FROM resultstate1
UNION ALL
SELECT rs1 FROM resultstate2
);
결합된 행 집합의 대략적인 카디널리티 가져오기:
SELECT HLL_ESTIMATE(c1)
FROM combined_resultstate;
+------------------+
| HLL_ESTIMATE(C1) |
|------------------|
| 12 |
+------------------+
더 알아보기
- Snowflake 집계 함수 (카디널리티 추정) — 관련 집계 함수 전체 목록