APPROX_TOP_K
APPROX_TOP_K
Space-Saving 알고리즘을 사용하여 입력에서 가장 빈번한 값들과 그 대략적인 빈도를 반환해요.
출력은 배열의 JSON 배열이에요. 내부 배열에서 첫 번째 항목은 입력의 값이고, 두 번째 항목은 입력에서의 추정 빈도에 해당해요. 외부 배열은 빈도 내림차순으로 정렬된 k개 항목을 포함해요.
APPROX_TOP_K에 대한 자세한 내용은 빈번한 값 추정(Estimating Frequent Values) 문서를 참고해요.
본문
참고 항목: 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 |
+-------+-----------+
더 알아보기
- Snowflake 집계 함수 (빈도 추정) — 관련 집계 함수 전체 목록