- 카테고리:
집계 함수 (Frequency Estimation) , 윈도우 함수 구문 및 사용법
APPROX_TOP_K_ESTIMATE¶
주어진 공간 절약 상태에 대한 대략적인 가장 빈번한 값과 추정 빈도를 반환합니다. (공간 절약 요약에 대한 자세한 내용은 자주 나타나는 값 추정하기 를 참조하십시오.)
APPROX_TOP_K_ACCUMULATE 및 APPROX_TOP_K_COMBINE 에 의해 생성된 공간 절약 상태는 APPROX_TOP_K_ESTIMATE 함수를 사용하여 카디널리티 추정치를 계산하는 데 사용할 수 있습니다.
따라서 APPROX_TOP_K_ESTIMATE(APPROX_TOP_K_ACCUMULATE(…))는 APPROX_TOP_K(…)와 동일합니다.
구문¶
APPROX_TOP_K_ESTIMATE( <state> [ , <k> ] )
인자¶
stateAPPROX_TOP_K_ACCUMULATE 또는 APPROX_TOP_K_COMBINE 호출에 의해 생성된 상태 정보를 포함하는 식입니다.
k카운트를 근사화하려는 값의 수입니다. 예를 들어, 가장 일반적인 상위 10개 값을 보려면
k를 10으로 설정합니다.k를 생략하는 경우, 기본값은1입니다.최댓값은
100000(100,000)이며 항목이 출력에 맞지 않으면 자동으로 줄어듭니다.
반환¶
ARRAY 형식의 값을 반환합니다.
예¶
이 예에서는 세 가지 관련 함수 APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_ESTIMATE, APPROX_TOP_K_COMBINE 을 사용하는 방법을 보여줍니다.
참고
이 예에서는 일관된 결과를 얻기 위해 고유한 데이터 값보다 더 많은 카운터를 사용합니다. 실제 애플리케이션에서 고유 값의 수는 일반적으로 카운터 수보다 크므로 근삿값이 다양할 수 있습니다.
이 예에서는 값이 1-8인 행이 8개인 테이블 하나와 값이 5-12인 행이 8개인 두 번째 테이블을 생성합니다. 따라서 두 테이블의 합세트에서 가장 빈번한 값은 각각 개수 2를 갖는 값 5-8입니다.
간단한 테이블과 데이터를 만듭니다.
-- Create a sequence to use to generate values for the table. 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); -- Double the number of rows a few times, until there are 8 rows: 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 data. 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 | | ] | | ] | +------------------------------+