# Substrait - 데이터 처리 연산에 대한 크로스 플랫폼 교환 표준

> Clean Markdown view of GeekNews topic #21750. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=21750](https://news.hada.io/topic?id=21750)
- GeekNews Markdown: [https://news.hada.io/topic/21750.md](https://news.hada.io/topic/21750.md)
- Type: news
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-07-01T09:31:01+09:00
- Updated: 2025-07-01T09:31:01+09:00
- Original source: [substrait.io](https://substrait.io/)
- Points: 6
- Comments: 0

## Summary

Substrait는 **오픈소스 쿼리 실행계획 표준**으로, 다양한 **분산 처리 엔진**이 중립적 포맷을 통해 쿼리 계획을 손쉽게 교환하고 통합할 수 있게 합니다. 프로토콜 버퍼 기반 직렬화와 **플러그인 확장성**을 갖추어, 하드웨어 가속기 연동 및 이기종 환경에서의 효율적 데이터 분석을 지원합니다. DuckDB, Spark, Velox, Sirius 등 엔진들이 이미 **쿼리 플랜 교환 및 통합** 목적으로 도입 중입니다.

## Topic Body

- 다양한 데이터베이스, 분석·쿼리 엔진 간에 구조적 **데이터 처리 연산(관계 대수, 쿼리 계획 등)을 직렬화**해 교환할 수 있도록 설계된 **오픈소스 포맷 및 인터페이스**  
- 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는 데이터베이스 및 분석 플랫폼 생태계의 "쿼리 실행계획 표준"으로, 엔진 간 상호운용성·하드웨어 가속화·데이터 생태계 확장성의 핵심**  
- 하드웨어 가속기 연동이나 쿼리 엔진 통합을 단순화하는 기반 표준으로 자리잡고 있으며, 복잡한 쿼리 파싱/변환 없이도 고성능 분석 인프라 구축이 쉬워짐

## Comments



_No public comments on this page._
