Druid SQL

Druid SQL (Druid SQL)

Apache Druid의 SQL 쿼리 언어인 Druid SQL에 대해 설명하는 문서예요. SQL 구문으로 Druid 데이터를 질의하고, native 쿼리로 번역되어 실행되는 방식을 다뤄요.

출처: 문서

본문

Druid SQL은 Druid에 내장된 SQL언어예요. Druid SQL 쿼리는 실행되기 전에 "native" 쿼리로 번역되고, 결과는 TEXT, JSON, CSV 같은 다양한 형식으로 반환될 수 있어요.

Druid SQL은 웹 콘솔, HTTP API(/druid/v2/sql, /druid/v2/sql/statements), JDBC 드라이버 등 다양한 방법으로 제출할 수 있어요.

쿼리 실행 (Query execution)

Druid SQL 쿼리는 Broker에서 native 쿼리로 번역되고 클러스터에서 실행돼요. 대부분의 SQL 쿼리는 Broker가 분배하고 데이터 서버가 병렬로 처리하며, Broker가 결과를 병합해 반환해요.

SQL 쿼리를 제출하는 방법에 따라 결과 처리 방식이 달라져요:

  • /druid/v2/sql — 동기식, 결과가 HTTP 응답에 직접 반환돼요.
  • /druid/v2/sql/statements — 비동기식(MSQ 기반), 결과를 조회하거나 내구성 있는 스토리지에 저장할 수 있어요.
  • JDBC — 표준 JDBC Statement/ResultSet으로 사용해요.

SQL 구문 (SQL syntax)

Druid SQL은 표준 SQL에 가까운 구문을 지원해요. 주요 절:

SELECT <columns>
FROM <dataSource>
WHERE <condition>
GROUP BY <columns>
HAVING <condition>
ORDER BY <columns>
LIMIT <n> [OFFSET <m>]

데이터 소스 (Data sources)

FROM 절은 데이터 소스를 참조해요. 주요 데이터 소스:

  • Table: FROM "datasource_name". "(큰따옴표)로 감싼 이름은 식별자로 취급돼요. 테이블 이름에 대시나 숫자가 있으면 따옴표가 필요할 수 있어요.
  • Lookup: 조회를 테이블처럼 참조.
  • Subquery: FROM (SELECT ...) 형태의 서브쿼리.
  • Join: FROM t1 JOIN t2 ON ....
  • VALUES / Inline: FROM (VALUES (1, 'a'), (2, 'b')) AS t(col1, col2) 인라인 데이터.
  • UNNEST: 배열/멀티-밸류를 펼치는 데 사용.

식별자 (Identifiers)

식별자는 큰따옴표("column")로 감쌀 수 있어요. 작은따옴표('value')는 문자열 리터럴이에요. 대시가 포함된 테이블 이름은 "my-table"처럼 따옴표를 써야 해요.

리터럴 (Literals)

Druid SQL은 문자열, 숫자, BOOLEAN, NULL, 타임스탬프(TIMESTAMP '2020-01-01 00:00:00'), 날짜(DATE '2020-01-01') 리터럴을 지원해요.

데이터 타입 (Data types)

Druid SQL은 LONG, FLOAT, DOUBLE, STRING, BOOLEAN, ARRAY, COMPLEX 데이터 타입을 지원해요. 타입에 대한 자세한 내용은 SQL 데이터 타입 문서를 참고하세요.

함수 (Functions)

Druid SQL은 스칼라 함수와 집계 함수를 지원해요. 날짜/시간, 문자열, 수학, JSON, 배열, 멀티-밸류 관련 함수가 풍부하게 제공돼요. 각 함수는 관련 문서에서 자세히 확인할 수 있어요.

쿼리 context (Query context)

SQL 쿼리는 쿼리 context를 통해 실행 방식을 제어할 수 있어요. SET 문이나 context 객체로 설정해요. 자세한 내용은 쿼리 context 문서를 참고하세요.

SQL에서 수정 작업 (SQL-based ingestion)

Druid SQL은 INSERT INTO ... SELECT 구문을 사용한 SQL 기반 인제스트(MSQ)도 지원해요. 이는 기존 데이터를 변환하거나 서로 다른 데이터 소스를 조인해 새 세그먼트를 만들 때 유용해요.

더 알아보기 (Learn more)