HLL_ESTIMATE
HLL_ESTIMATE
주어진 HyperLogLog 상태에 대한 카디널리티 추정값을 반환해요.
HLL_ACCUMULATE와 HLL_COMBINE이 만든 HyperLogLog 상태를 사용해 HLL_ESTIMATE 함수로 카디널리티 추정값을 계산할 수 있어요.
따라서 HLL_ESTIMATE(HLL_ACCUMULATE(…))는 HLL(…)과 동일해요.
본문
구문
집계 함수
HLL_ESTIMATE( <state> )
윈도우 함수
HLL_ESTIMATE( <state> ) OVER ( [ PARTITION BY <expr> ] )
OVER 절에 대한 자세한 내용은 윈도우 함수 구문과 사용법을 참고하세요.
인자
state
- HLL_ACCUMULATE 또는 HLL_COMBINE 호출로 생성된 상태 정보가 담긴 표현식이에요.
사용 시 참고 사항
- 이 함수는 집계 함수 또는 윈도우 함수로 사용할 수 있어요.
예시
이 예시는 서로 관련된 세 함수 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 |
+------------------+
더 알아보기
- Aggregate functions — 집계 함수 모음
- HLL_ACCUMULATE — HLL 상태 누적
- HLL_COMBINE — HLL 상태 결합
- HLL — 고유 값 수 근사 집계