APPROX_TOP_K_ESTIMATE
APPROX_TOP_K_ESTIMATE
APPROX_TOP_K_ESTIMATE() 함수는 주어진 Space-Saving 상태에 대해 근사적으로 가장 빈번한 값과 그 추정 빈도를 반환해요. (Space-Saving 요약에 대한 자세한 내용은 빈번한 값 추정하기 문서를 참고하세요.)
APPROX_TOP_K_ACCUMULATE와 APPROX_TOP_K_COMBINE으로 생성된 Space-Saving 상태를 사용해 APPROX_TOP_K_ESTIMATE 함수로 카디널리티 추정값을 계산할 수 있어요. 따라서 APPROX_TOP_K_ESTIMATE(APPROX_TOP_K_ACCUMULATE(…))는 APPROX_TOP_K(…)와 동일해요.
본문
문법
APPROX_TOP_K_ESTIMATE( <state> [ , <k> ] )
인자
state — APPROX_TOP_K_ACCUMULATE 또는 APPROX_TOP_K_COMBINE 호출로 생성된 상태 정보를 담은 표현식이에요.
k — 개수를 근사하고 싶은 값의 수예요. 예를 들어 가장 흔한 상위 10개 값을 보려면 k를 10으로 설정해요. k를 생략하면 기본값은 1이에요. 최대값은 100000(10만)이며, 항목이 출력에 들어갈 수 없으면 자동으로 줄어들어요.
반환
ARRAY 타입의 값을 반환해요.
사용 노트
- 소수 부동소수점(DECFLOAT) 값은 지원하지 않아요.
예제
이 예제는 APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_ESTIMATE, APPROX_TOP_K_COMBINE 세 함수를 어떻게 사용하는지 보여줘요.
이 예제는 데이터 고유 값보다 많은 counters를 사용해 일관된 결과를 얻어요. 실제 애플리케이션에서는 고유 값 수가 보통 counters 수보다 크기 때문에 근사값이 달라질 수 있어요.
이 예제는 값 18을 가진 8개 행의 테이블 하나와, 값 512를 가진 8개 행의 두 번째 테이블을 만든다. 따라서 두 테이블의 합집합에서 가장 빈번한 값은 5-8이며, 각 값의 개수는 2예요.
간단한 테이블과 데이터를 만들어요:
CREATE OR REPLACE SEQUENCE seq91;
CREATE OR REPLACE TABLE sequence_demo (c1 INTEGER DEFAULT seq91.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 테이블의 현재 근사 Top K 정보를 나타내는 "상태"를 담은 테이블을 만들어요:
CREATE OR REPLACE TABLE resultstate1 AS (
SELECT APPROX_TOP_K_ACCUMULATE(c1, 50) 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 APPROX_TOP_K_ACCUMULATE(c1, 50) AS rs1
FROM test_table2);
두 배치 행의 "상태" 정보를 결합해요:
CREATE OR REPLACE TABLE combined_resultstate (c1) AS
SELECT APPROX_TOP_K_COMBINE(rs1) AS apc1
FROM (
SELECT rs1 FROM resultstate1
UNION ALL
SELECT rs1 FROM resultstate2
);
결합된 행 집합의 근사 Top K 값을 얻어요:
SELECT APPROX_TOP_K_ESTIMATE(c1, 4)
FROM combined_resultstate;
+------------------------------+
| APPROX_TOP_K_ESTIMATE(C1, 4) |
|------------------------------|
| [ |
| [ |
| 5, |
| 2 |
| ], |
| [ |
| 6, |
| 2 |
| ], |
| [ |
| 7, |
| 2 |
| ], |
| [ |
| 8, |
| 2 |
| ] |
| ] |
+------------------------------+