APPROX_TOP_K

APPROX_TOP_K

Space-Saving 알고리즘을 사용하여 입력에서 가장 빈번한 값들과 그 대략적인 빈도를 반환해요.

출력은 배열의 JSON 배열이에요. 내부 배열에서 첫 번째 항목은 입력의 값이고, 두 번째 항목은 입력에서의 추정 빈도에 해당해요. 외부 배열은 빈도 내림차순으로 정렬된 k개 항목을 포함해요.

APPROX_TOP_K에 대한 자세한 내용은 빈번한 값 추정(Estimating Frequent Values) 문서를 참고해요.

출처: Snowflake APPROX_TOP_K 함수 문서

본문

참고 항목: APPROX_TOP_K_ACCUMULATE, APPROX_TOP_K_COMBINE, APPROX_TOP_K_ESTIMATE

구문 (Syntax)

집계 함수 (Aggregate):

APPROX_TOP_K(  [ ,  [ ,  ] ] )

윈도우 함수 (Window):

APPROX_TOP_K(  [ ,  [ ,  ] ] ) OVER ( [ PARTITION BY  ] )

인자 (Arguments)

  • expr — 가장 흔한 값을 찾으려는 표현식(예: 컬럼 이름)이에요.
  • k — 카운트를 근사화하려는 값의 수예요. 예를 들어 상위 10개 가장 흔한 값을 보려면 k를 10으로 설정해요. k가 생략되면 기본값은 1이에요. 최대 값은 100000(10만)이며, 항목이 출력에 맞지 않으면 자동으로 줄어들어요.
  • counters — 추정 과정 중 한 번에 추적할 수 있는 고유 값의 최대 수예요. 예를 들어 counters를 100000으로 설정하면 알고리즘은 100,000개의 고유 값을 추적하며, 가장 빈번한 100,000개 값을 유지하려고 해요. counters의 최대 수는 100000(10만)이에요.
  • expr4 — 행을 파티션으로 그룹화하는 데 사용되는 선택 표현식이에요.

사용 노트 (Usage Notes)

  • counters의 수가 크면 근사가 더 정확하므로, 대부분의 경우 counters는 k보다 상당히 커야 해요. (각 카운터는 적은 메모리만 사용하므로 카운터 수를 늘리는 것은 메모리 측면에서 비싸지 않아요.)
  • 이 함수를 윈도우 함수로 호출할 때 다음을 지원하지 않아요:
    • OVER 절 내의 ORDER BY 절
    • 명시적 윈도우 프레임
  • 소수 부동 소수점(DECFLOAT) 값은 지원되지 않아요.

예제 (Examples)

SELECT APPROX_TOP_K(C4) FROM lineitem;
+--------------------+
| APPROX_TOP_K(C4,3) |
+--------------------+
| [                  |
|   [                |
|     1,             |
|     124923         |
|   ],               |
|   [                |
|     2,             |
|     107093         |
|   ],               |
|   [                |
|     3,             |
|    89315           |
|   ]                |
| ]                  |
+--------------------+
WITH states AS (
  SELECT approx_top_k(C4, 3, 5) AS state
  FROM lineitem)
SELECT value[0]::INT AS value, value[1]::INT AS frequency
  FROM states, LATERAL FLATTEN(state);
+-------+-----------+
| VALUE | FREQUENCY |
+-------+-----------+
|     1 |    124923 |
|     2 |    107093 |
|     3 |     89438 |
+-------+-----------+

더 알아보기