HLL_ESTIMATE

HLL_ESTIMATE

주어진 HyperLogLog 상태에 대한 카디널리티 추정값을 반환해요.

HLL_ACCUMULATE와 HLL_COMBINE이 만든 HyperLogLog 상태를 사용해 HLL_ESTIMATE 함수로 카디널리티 추정값을 계산할 수 있어요.

따라서 HLL_ESTIMATE(HLL_ACCUMULATE(…))는 HLL(…)과 동일해요.

출처: Snowflake SQL Reference - HLL_ESTIMATE

본문

구문

집계 함수

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 |
+------------------+

더 알아보기