Top-N
Top-N
Top-N 질의는 열을 기준으로 정렬된 N개의 가장 작은 또는 가장 큰 값을 요청합니다. 가장 작은 값 집합과 가장 큰 값 집합 모두 Top-N 질의로 간주됩니다. Top-N 질의는 조건에 따라 배치/스트리밍 테이블에서 가장 아래 N개 또는 가장 위 N개의 레코드만 표시해야 할 때 유용하며, 이 결과 집합은 추가 분석에 사용될 수 있습니다.
출처: 문서
본문
Top-N 질의는 열을 기준으로 정렬된 N개의 가장 작은 또는 가장 큰 값을 요청합니다. 가장 작은 값 집합과 가장 큰 값 집합 모두 Top-N 질의로 간주됩니다. Top-N 질의는 특정 조건에 따라 배치/스트리밍 테이블에서 가장 아래 N개 또는 가장 위 N개의 레코드만 표시해야 할 때 유용합니다. 이 결과 집합은 추가 분석에 사용할 수 있습니다.
Flink는 OVER 윈도우 절과 필터 조건의 조합을 사용하여 Top-N 질의를 표현합니다. OVER 윈도우 PARTITION BY 절의 힘을 통해 Flink는 그룹별 Top-N도 지원합니다. 예를 들어, 실시간으로 카테고리별로 매출이 가장 높은 상위 5개 제품이 있습니다. Top-N 질의는 배치 및 스트리밍 테이블에 대한 SQL에서 모두 지원됩니다.
다음은 Top-N 문의 문법을 보여줍니다:
SELECT [column_list],
ROW_NUMBER() OVER ([PARTITION BY col1[, col2...]] ORDER BY time_attr [asc|desc]) AS rownum
FROM table_name
QUALIFY rownum <= N
[WHERE conditions]
파라미터 명세 (Parameter Specification):
ROW_NUMBER(): 파티션 내 행의 정렬 순서에 따라 각 행에 1부터 시작하는 고유한 순차 번호를 할당합니다. 현재는 OVER 윈도우 함수로ROW_NUMBER만 지원합니다. 향후RANK()와DENSE_RANK()를 지원할 예정입니다.PARTITION BY col1[, col2...]: 파티션 열을 지정합니다.ORDER BY time_attr [asc|desc]: 정렬 열을 지정합니다. Top-N 질의에서 정렬 열은 시간 속성(time attribute)이어야 합니다.QUALIFY rownum <= N: Top-N이 필터링되어야 하는 행 번호 조건을 지정합니다.QUALIFY절은SELECT/GROUP BY등의 절이 끝난 후 적용됩니다.WHERE conditions: 필요한 경우 추가 필터 조건을 지정합니다.