SQL 문법
SQL 문법 (SQL Syntax)
Pinot가 쓰는 SQL 문법과 자주 쓰는 핵심 구성 요소를 실용적으로 설명하는 페이지예요.
출처: SQL Syntax
본문
Pinot는 Apache Calcite SQL 파서를 MYSQL_ANSI 방언으로 사용합니다. 이 페이지는 매일 쓰는 문법 패턴을 실무 관점에서 다루고, 전체 연산자 목록이 필요할 때는 더 깊은 레퍼런스로 안내합니다.
핵심 규칙
- 문자열 리터럴에는 작은따옴표를 사용하세요.
- 컬럼 이름이 예약어이거나 특수 문자를 포함하면 큰따옴표로 식별자를 감싸세요.
SET문은 쿼리가 실행되기 전에 쿼리 옵션을 적용합니다.EXPLAIN PLAN FOR는 데이터를 반환하지 않고 Pinot가 쿼리를 어떻게 실행할지 보여 줍니다.
SET useMultistageEngine = true;
SELECT "date", city, COUNT(*)
FROM orders
WHERE status = 'shipped'
GROUP BY "date", city
ORDER BY "date" DESC
LIMIT 20;
흔한 쿼리 형태
Pinot는 일반적인 SELECT, WHERE, GROUP BY, ORDER BY, LIMIT 패턴을 지원합니다.
대표적인 쿼리 형태는 다음과 같습니다:
- 테이블을 필터링해 작은 결과 집합을 반환하기
- 하나 이상의 차원으로 그룹핑하고 집계하기
LIMIT전에ORDER BY로 행에 순위를 매기기- select 목록에서
CASE WHEN과 스칼라 함수 사용하기
엔진별 문법
일부 SQL 기능은 엔진에 따라 달라집니다:
- 단일 스테이지 실행은 단순 분석 쿼리에 가장 적합합니다
- 조인, 서브쿼리, 여러 고급 분산 패턴에는 멀티 스테이지 실행이 필요합니다
EXPLAIN PLAN FOR가 Pinot가 문장을 어떻게 해석하는지 보는 가장 좋은 방법입니다
쿼리를 작성하다가 어떤 기능이 지원되는지 모르겠다면, 문법이 유효하지 않다고 단정하기 전에 엔진별 지침부터 확인하세요.
DDL은 컨트롤러에서 실행됩니다
Pinot는 컨트롤러가 관리하는 SQL DDL도 지원하지만, 브로커 쿼리 경로가 아니라 컨트롤러를 통해 노출됩니다. CREATE TABLE, DROP TABLE, SHOW TABLES, SHOW CREATE TABLE 같은 테이블 문장과 CREATE MATERIALIZED VIEW, SHOW MATERIALIZED VIEWS, SHOW CREATE MATERIALIZED VIEW, DROP MATERIALIZED VIEW 같은 머티리얼라이즈드 뷰 문장에는 POST /sql/ddl을 사용하세요.
이 구분이 중요한 이유는 SSE와 MSE 엔진이 여전히 데이터를 조회하는 쿼리 문장만 실행하고 컨트롤러 메타데이터 변경은 실행하지 않기 때문입니다. 컨트롤러가 관리하는 DDL의 문법과 예제가 필요하면 SQL DDL과 Materialized Views를 참고하세요.
세부 내용이 있는 곳
이 페이지는 의도적으로 가볍게 유지됩니다. 문장별 전체 레퍼런스는 SQL syntax and operators reference를, 컨트롤러 관리 DDL은 SQL DDL을, MV 워크플로 지침은 Materialized Views를, 쿼리 제어와 진단은 query-execution-controls/ 아래 페이지들을 참고하세요.
이 페이지에서 다룬 내용
이 페이지는 Pinot SQL의 주요 규칙, 가장 흔한 문장 패턴, 그리고 해설 가이드와 전체 SQL 레퍼런스의 차이를 다뤘습니다.
다음 단계
더 넓은 쿼리 워크플로는 Querying Pinot을, 런타임 동작을 제어하려면 Query options을 읽어 보세요.