정렬 순서

정렬 순서 (Sorting orders)

Apache Druid가 쿼리 결과를 정렬할 때 어떤 기준으로 값을 비교하는지를 정하는 sorting order에 대해 설명할게요. 이 정렬 방식들은 TopNMetricSpec, SearchQuery, GroupByQuery의 LimitSpec, 그리고 BoundFilter에서 공통으로 사용돼요.

출처: 문서

본문

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

이 정렬 순서들은 TopNMetricSpec, SearchQuery, GroupByQuery의 LimitSpec, 그리고 BoundFilter에서 사용돼요.

Lexicographic (사전순)

문자열을 String을 UTF-8 바이트 배열로 변환한 표현으로 바꾼 다음, 바이트를 하나씩 비교하는 사전식(lexicographic) 방식으로 정렬해요. 말 그대로 바이트 단위로 앞에서부터 비교하는 셈이에요.

Alphanumeric (영숫자순)

숫자와 비숫자 내용이 섞여 있는 문자열에 적합한 정렬이에요. 예를 들어 "file12"가 "file2"보다 나중에 정렬돼요.

이 순서가 값을 어떻게 정렬하는지에 대한 자세한 내용은 https://github.com/amjjd/java-alphanum 를 참고하세요.

이 정렬 순서는 소수점이 있거나 음수인 숫자에는 적합하지 않아요.

  • 예를 들어 "1.3"은 "1.15"보다 앞에 정렬돼요. "15"가 "3"보다 유효 자릿수가 많기 때문이에요.
  • 음수는 양수보다 나중에 정렬돼요 (음수의 숫자 문자 앞에 "-"가 있기 때문이에요).

Numeric (숫자순)

값을 숫자로 취급해서 정렬해요. 정수와 부동소수점 값을 지원하고, 음수도 지원해요.

이 정렬 순서는 모든 문자열 값을 숫자로 파싱하려고 시도해요. 파싱할 수 없는 값은 null로 처리되고, null은 숫자보다 앞에 정렬돼요.

파싱할 수 없는 두 값을 비교할 때(예: "hello"와 "world"), 이 정렬은 파싱되지 않은 문자열을 사전식으로 비교해서 정렬해요.

Strlen (문자열 길이순)

값을 문자열 길이로 정렬해요. 길이가 같은 경우(동점)에는 String의 compareTo 메서드로 되돌아가 비교해요.

Version (버전순)

값을 버전으로 취급해서 정렬해요. 예: "10.0"은 "9.0"보다 나중에, "1.0.0-SNAPSHOT"은 "1.0.0"보다 나중에 정렬돼요.

이 순서가 값을 어떻게 정렬하는지에 대한 자세한 내용은 https://maven.apache.org/ref/3.6.0/maven-artifact/apidocs/org/apache/maven/artifact/versioning/ComparableVersion.html 를 참고하세요.

더 알아보기 (Learn more)

  • Druid SQL — SQL에서 사용할 수 있는 정렬 관련 함수들을 확인해 보세요.
  • TopNMetricSpec — Top-N 쿼리에서 정렬 기준을 지정하는 방법을 살펴보세요.