- 다양한 데이터베이스, 분석·쿼리 엔진 간에 구조적 데이터 처리 연산(관계 대수, 쿼리 계획 등)을 직렬화해 교환할 수 있도록 설계된 오픈소스 포맷 및 인터페이스
- DuckDB, Spark, DataFusion, Sirius 등 다양한 DB·분산 처리·쿼리 엔진에서 서로 다른 시스템 간 쿼리/실행계획 교환·호환성 확보를 목적으로 채택·도입 중
- SQL, DataFrame, Pandas 등 각기 다른 쿼리 언어나 엔진의 실행계획을 중립적/표준화된 포맷(프로토콜 버퍼, YAML, JSON 등) 으로 표현해 플러그인·서드파티 엔진 통합, 하드웨어 가속기 연동을 단순화함
Substrait란 무엇인가?
-
데이터 분석/처리 시스템의 "쿼리 계획(Logical/Physical Plan)"을 표준 포맷으로 정의한 오픈소스 프로젝트
- SQL, DataFrame, LINQ 등 다양한 언어의 쿼리 구조(예: SELECT-FROM-WHERE, Join, Aggregation, Projection, Filter 등)를 표준 스키마로 직렬화/역직렬화
- 데이터베이스 및 엔진마다 쿼리 파서·실행계획이 달라, 상호 연동·하드웨어 가속기 활용에 한계 → 공통 표준(중간 표현)으로 추상화
- SQL, DataFrame, Pandas 등 각기 다른 쿼리 언어·프레임워크의 실행계획을 Substrait 포맷으로 변환해 공유 가능
Substrait의 주요 특징
-
중립적 쿼리 표현: 논리적(논리 연산자)·물리적(실행 연산자) 쿼리 계획 모두 표현 가능
-
프로토콜 버퍼 기반 직렬화(주로 .proto 스키마 활용)로, 다양한 언어 및 시스템에서 효율적 데이터 교환 가능
-
엔진/플러그인 확장성: 새로운 함수, 연산자, 타입도 플러그인 방식으로 확장 가능
-
하드웨어 가속 연동: GPU/FPGA/전용 가속기용 엔진과 쿼리 계획 레벨에서 손쉽게 통합 가능(Sirius, Velox, NVIDIA RAPIDS 등)
-
플랫폼 간 연동: 데이터 레이크, 분산 처리, 로컬 분석 등 다양한 엔진이 동일 쿼리 계획을 받아들여 실행할 수 있음
Substrait가 왜 중요한가?
- 각 엔진이 별도의 커스텀 인터페이스를 만들지 않고 Substrait만 지원하면 생태계 통합이 즉시 가능
-
데이터 엔진·플랫폼 간 "쿼리/분석 실행 계획의 공통 언어" 역할
- DB에서 쿼리 → Substrait 플랜 → GPU/분산 엔진, 별도 가속기 등으로 전달 및 실행
- 쿼리 변환/재작성 필요 없이 "실행 계획 레벨"에서 엔진 간 연결
- 새로운 쿼리 엔진이 등장해도 쉽게 "플러그인"으로 교체/조합 가능(엔진 교체 유연성)
- SQL/파이썬/분산 쿼리 등 다양한 쿼리 언어/환경을 통합
- 클러스터/분산 환경에서 다양한 엔진 혼합 운영 가능(이기종 환경 지원)
- 텍스트 버전 제공으로 쿼리 계획을 쉽게 분석하거나, 시각화 도구와 연동할 수 있음
실사용 예시
- SQL 파서와 실행 엔진 간 쿼리 플랜 교환(Calcite → Arrow, DuckDB → Sirius 등)
-
DuckDB: 내부 쿼리 플랜을 Substrait로 내보내기(export), 외부에서 Substrait 쿼리 불러오기(import) 지원
-
Sirius: DuckDB에서 생성된 Substrait 쿼리 플랜을 그대로 받아 GPU 상에서 SQL 실행 가능, 쿼리 파싱/수정 불필요
- 데이터프레임 연산(Pandas 등)을 외부 데이터베이스에서 실행
- 서드파티 쿼리 계획 시각화 도구(D3, Web 등) 제작
-
Velox, Spark, DataFusion 등: 각 엔진의 쿼리 플랜을 Substrait로 내보내, 다양한 분석·가속 엔진과 통합
기술적으로 어떤 구조?
- Substrait 플랜은 주로 프로토콜 버퍼(.proto) 기반 정의
- LogicalPlan, PhysicalPlan, Rel, Expression, Function 등으로 구성
- Filter, Join, Aggregate, Project, Sort 등 연산자별 명확한 스키마
- 확장 가능한 함수/타입 카탈로그 및 UDF(User-Defined Function) 확장 가능
결론
-
Substrait는 데이터베이스 및 분석 플랫폼 생태계의 "쿼리 실행계획 표준"으로, 엔진 간 상호운용성·하드웨어 가속화·데이터 생태계 확장성의 핵심
- 하드웨어 가속기 연동이나 쿼리 엔진 통합을 단순화하는 기반 표준으로 자리잡고 있으며, 복잡한 쿼리 파싱/변환 없이도 고성능 분석 인프라 구축이 쉬워짐