본문 바로가기

[오라클 레퍼런스 함수] APPROX_COUNT_DISTINCT_DETAIL - 근사치로 고유값 수 계산

by ㅇㅍㅍ 2023. 7. 30.
[오라클 레퍼런스 함수] APPROX_COUNT_DISTINCT_DETAIL - 근사치로 고유값 수 계산
728x90

APPROX_COUNT_DISTINCT_DETAIL

 

구문

APPROX_COUNT_DISTINCT_DETAIL(expr)

 

목적

APPROX_COUNT_DISTINCT_DETAIL 함수는 expr의 고유한 값이 포함된 행 수에 대한 근사치 정보를 계산하고 해당 정보를 특수 형식으로 담은 BLOB 값을 반환합니다.

expr에는 BFILE, BLOB, CLOB, LONG, LONG RAW 또는 NCLOB 이외의 모든 스칼라 데이터 유형의 열을 지정할 수 있습니다. 이 함수는 expr의 값이 null인 행을 무시합니다.

이 함수는 주로 SELECT 문의 GROUP BY 절과 함께 사용됩니다. 이렇게 사용할 때, 그룹 내에서 expr에 대한 근사치 고유값 개수 정보를 계산하고 각 그룹에 대해 하나의 세부 정보를 반환합니다.

APPROX_COUNT_DISTINCT_DETAIL로 반환된 세부 정보는 APPROX_COUNT_DISTINCT_AGG 함수의 입력으로 사용할 수 있으며, 이를 통해 세부 정보를 집계할 수 있습니다. 또한 TO_APPROX_COUNT_DISTINCT 함수를 사용하여 세부 정보를 사람이 읽을 수 있는 숫자 형태의 고유 개수 값으로 변환할 수 있습니다. 이 세 함수를 함께 사용하여 자원 집약적인 근사 카운트 계산을 한 번만 수행하고, 결과 세부 정보를 저장한 다음 효율적인 집계 및 조회를 수행할 수 있습니다. 예를 들어:

 

  1. APPROX_COUNT_DISTINCT_DETAIL 함수를 사용하여 근사치 고유 값 개수 정보를 계산하고 해당 결과 세부 정보를 테이블이나 머티리얼라이즈드 뷰에 저장합니다. 이는 도시 인구 통계 또는 일일 판매 통계와 같이 고도로 세분화된 세부 정보일 수 있습니다.
  2. APPROX_COUNT_DISTINCT_AGG 함수를 사용하여 이전 단계에서 얻은 세부 정보를 집계하고 해당 결과 세부 정보를 테이블이나 머티리얼라이즈드 뷰에 저장합니다. 이는 주별 인구 통계 또는 월간 판매 통계와 같이 낮은 세분화의 세부 정보일 수 있습니다.
  3. TO_APPROX_COUNT_DISTINCT 함수를 사용하여 저장된 세부 정보 값을 사람이 읽을 수 있는 숫자 값으로 변환합니다. TO_APPROX_COUNT_DISTINCT 함수를 사용하여 APPROX_COUNT_DISTINCT_DETAIL 함수 또는 APPROX_COUNT_DISTINCT_AGG 함수로 생성된 세부 정보 값을 쿼리하는 데 사용할 수 있습니다.

 

참고:

 

예제

이 섹션의 예제들은 APPROX_COUNT_DISTINCT_DETAIL, APPROX_COUNT_DISTINCT_AGG, TO_APPROX_COUNT_DISTINCT 함수를 함께 사용하여 자원 집약적인 근사 카운트 계산을 한 번만 수행하고, 결과 세부 정보를 저장한 다음 효율적인 집계 및 조회를 수행하는 방법을 보여줍니다.

 

APPROX_COUNT_DISTINCT_DETAIL: 예제

다음 문장은 sh.timessh.sales 테이블을 조회하여 매일 판매된 고유 제품의 근사치 개수를 가져옵니다. APPROX_COUNT_DISTINCT_DETAIL 함수는 매일 제품이 판매된 날짜마다 detail인 daily_detail을 반환합니다. 반환된 세부 정보는 daily_prod_count_mv라는 머티리얼라이즈드 뷰에 저장됩니다.

CREATE MATERIALIZED VIEW daily_prod_count_mv AS
  SELECT t.calendar_year year,
         t.calendar_month_number month,
         t.day_number_in_month day,
         APPROX_COUNT_DISTINCT_DETAIL(s.prod_id) daily_detail
  FROM times t, sales s
  WHERE t.time_id = s.time_id
  GROUP BY t.calendar_year, t.calendar_month_number, t.day_number_in_month;

 

APPROX_COUNT_DISTINCT_AGG: 예제

다음 문장은 APPROX_COUNT_DISTINCT_AGG 함수를 사용하여 daily_prod_count_mv에 저장된 매일 세부 정보를 읽고, 근사치로 매월 판매된 고유 제품의 개수를 담고 있는 집계된 세부 정보를 생성합니다. 이러한 집계된 세부 정보는 monthly_prod_count_mv라는 머티리얼라이즈드 뷰에 저장됩니다.

CREATE MATERIALIZED VIEW monthly_prod_count_mv AS
  SELECT year,
         month,
         APPROX_COUNT_DISTINCT_AGG(daily_detail) monthly_detail
  FROM daily_prod_count_mv
  GROUP BY year, month;

 

다음 문장은 이전 문장과 유사하지만, 근사치로 매년 판매된 고유 제품의 개수를 담고 있는 집계된 세부 정보를 생성합니다. 이러한 집계된 세부 정보는 annual_prod_count_mv라는 머티리얼라이즈드 뷰에 저장됩니다.

CREATE MATERIALIZED VIEW annual_prod_count_mv AS
  SELECT year,
         APPROX_COUNT_DISTINCT_AGG(daily_detail) annual_detail
  FROM daily_prod_count_mv
  GROUP BY year;

 

TO_APPROX_COUNT_DISTINCT: 예제

다음 문장은 TO_APPROX_COUNT_DISTINCT 함수를 사용하여 daily_prod_count_mv에 저장된 매일 세부 정보를 조회하고, 근사치로 판매된 고유 제품의 수를 각 날짜별로 반환합니다.

SELECT year,
       month,
       day,
       TO_APPROX_COUNT_DISTINCT(daily_detail) "NUM PRODUCTS"
  FROM daily_prod_count_mv
  ORDER BY year, month, day;

      YEAR      MONTH        DAY NUM PRODUCTS
---------- ---------- ---------- ------------
      1998          1          1           24
      1998          1          2           25
      1998          1          3           11
      1998          1          4           34
      1998          1          5           10
      1998          1          6            8
      1998          1          7           37
      1998          1          8           26
      1998          1          9           25
      1998          1         10           38
. . .

 

다음 문장은 TO_APPROX_COUNT_DISTINCT 함수를 사용하여 monthly_prod_count_mv에 저장된 월별 세부 정보를 조회하고, 근사치로 판매된 고유 제품의 수를 각 달별로 반환합니다.

SELECT year,
       month,
       TO_APPROX_COUNT_DISTINCT(monthly_detail) "NUM PRODUCTS"
  FROM monthly_prod_count_mv
  ORDER BY year, month;

      YEAR      MONTH NUM PRODUCTS
---------- ---------- ------------
      1998          1           57
      1998          2           56
      1998          3           55
      1998          4           49
      1998          5           49
      1998          6           48
      1998          7           54
      1998          8           56
      1998          9           55
      1998         10           57
. . .

 

다음 문장은 TO_APPROX_COUNT_DISTINCT 함수를 사용하여 annual_prod_count_mv에 저장된 연간 세부 정보를 조회하고, 근사치로 판매된 고유 제품의 수를 각 연도별로 반환합니다.

SELECT year,
       TO_APPROX_COUNT_DISTINCT(annual_detail) "NUM PRODUCTS"
  FROM annual_prod_count_mv
  ORDER BY year;

      YEAR NUM PRODUCTS
---------- ------------
      1998           60
      1999           72
      2000           72
      2001           71

 


출처: 오라클 레퍼런스

원문 링크: Oracle APPROX_COUNT_DISTINCT_DETAIL 함수 문서

 

반응형

댓글