HLL_COMBINE
HLL_COMBINE
HLL_COMBINE은 HLL 계열 함수가 만든 입력 상태(state)들을 하나로 합쳐 단일 출력 상태로 만들어 주는 함수예요. 테이블을 가로로 분할해 각 파티션에서 HLL_ACCUMULATE를 먼저 돌려 둔 뒤, 그 상태들을 다시 합칠 때 사용해요. 이렇게 하면 전체 테이블에 HLL_ACCUMULATE를 한 번에 돌린 것과 같은 출력 상태를 얻을 수 있어요.
본문
카테고리: 집계 함수 (Cardinality Estimation), 윈도우 함수 (Cardinality Estimation)
구문 (Syntax)
집계 함수
HLL_COMBINE( [ DISTINCT ] <state> )
윈도우 함수
HLL_COMBINE( [ DISTINCT ] <state> ) OVER ( [ PARTITION BY <expr1> ] )
OVER 절에 대한 자세한 내용은 윈도우 함수 구문 및 사용법을 참고해요.
인자 (Arguments)
<state> — HLL_ACCUMULATE 호출로 생성된 상태 정보를 담은 표현식이에요.
사용 시 유의사항 (Usage notes)
-
DISTINCT는 구문상 지원되지만 실제 효과는 없어요.
-
이 함수의 출력은 완전히 결정적이지 않아요. 같은 입력에 이 함수를 실행해도 시점에 따라 다른 결과가 나올 수 있어요. 차이는 보통 아주 작으며, HLL_* 함수가 근사 함수라는 점에서 생기는 자연스러운 결과예요.
예시 (Examples)
이 예시는 서로 관련된 세 함수 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 테이블의 현재 근사 카디널리티 정보를 담은 "상태(state)"를 가진 테이블을 만들어요:
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;
새 데이터에 대한 "상태(state)" 정보를 가져와요:
CREATE OR REPLACE TABLE resultstate2 AS
(SELECT HLL_ACCUMULATE(c1) AS rs1
FROM test_table2);
두 배치의 행에 대한 "상태(state)" 정보를 합쳐요:
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 |
+------------------+