LimitSpec

LimitSpec (리밋 스펙)

groupBy 쿼리 결과를 정렬하고 개수를 제한하는 limitSpec 설정에 대해 설명할게요. 단일 차원으로 그룹화하고 단일 메트릭으로 정렬하는 경우라면 TopN 쿼리가 성능이 훨씬 좋으니 그쪽을 권장해요.

출처: 문서

본문

Apache Druid는 두 가지 쿼리 언어를 지원해요: Druid SQL 과 native 쿼리. 이 문서는 native 언어를 설명해요. SQL에서의 정렬에 대한 정보는 SQL 문서 를 참고하세요.

limitSpec 필드는 groupBy 쿼리의 결과 집합을 정렬하고 제한하는 기능을 제공해요. 단일 차원으로 그룹화하고 단일 메트릭으로 정렬한다면, TopN 쿼리 를 대신 사용할 것을 강력히 권장해요. 성능이 상당히 좋아져요. 사용 가능한 옵션은 다음과 같아요.

DefaultLimitSpec

기본 limit spec은 limit과 orderBy 연산을 수행할 컬럼 목록을 받아요. 문법은 다음과 같아요:

{
    "type": "default",
    "limit": <optional integer>,
    "offset": <optional integer>,
    "columns": [<optional list of OrderByColumnSpec>],
}

limit 파라미터는 반환할 최대 행 수예요.

offset 파라미터는 결과를 반환할 때 이만큼의 행을 건너뛰라고 Druid에 지시해요. limit과 offset이 모두 제공되면 offset이 먼저 적용되고 그다음 limit이 적용돼요. 예를 들어 limit 100, offset 10인 스펙은 10번째 행부터 100개 행을 반환해요. 내부적으로 쿼리는 limit을 offset만큼 늘려 실행된 뒤 offset에 해당하는 행 수를 버리는 방식으로 동작해요. 즉 offset을 올리면 limit을 올린 것과 비슷한 정도로 리소스 사용량이 증가해요.

limit과 offset을 함께 사용하면 페이지네이션(pagination)을 구현할 수 있어요. 다만 페이지를 가져오는 사이에 기본 datasource가 전체 쿼리 결과에 영향을 주는 방식으로 수정되면, 서로 다른 페이지가 반드시 정렬되지 않을 수 있다는 점에 유의하세요.

OrderByColumnSpec

OrderByColumnSpec은 order by 연산을 어떻게 수행할지를 나타내요. 각 order-by 조건은 jsonString이거나 다음 형태의 맵이에요:

{
    "dimension": "<Any dimension or metric name>",
    "direction": <"ascending"|"descending">,
    "dimensionOrder": <"lexicographic"(default)|"alphanumeric"|"strlen"|"numeric">
}

dimension만 제공되면(JSON 문자열로) 기본 order-by는 lexicographic 정렬에 오름차순이에요.

dimensionOrder가 지정하는 정렬 순서에 대한 자세한 내용은 Sorting Orders 를 참고하세요.

더 알아보기 (Learn more)