-
DuckDB는 단일 머신에서 대규모 테이블 데이터를 빠르고 간단하게 처리할 수 있는 오픈소스 SQL 엔진으로, 최근 데이터 엔지니어링에서 널리 사용됨
-
설치가 간단하고 의존성이 없으며, Python 환경에서 즉시 실행 가능해 CI·테스트 자동화에 적합함
-
분석 쿼리 최적화로 SQLite나 Postgres보다 최대 1,000배 빠른 성능을 보이며, 다양한 파일 형식(csv, parquet, json)을 직접 쿼리 가능
-
친화적인 SQL 문법(EXCLUDE, COLUMNS, QUALIFY, 함수 체이닝 등)과 Python API를 통해 복잡한 파이프라인을 효율적으로 개발 가능
-
ACID 준수, 고성능 UDF, PostgreSQL 통합 확장 등으로 중간 규모 데이터의 레이크하우스 대안으로 부상 중
DuckDB 개요
- DuckDB는 애널리틱스 쿼리 최적화에 초점을 둔 인프로세스 SQL 엔진
- 별도 서버 없이 애플리케이션 내부에서 실행되며, Postgres 같은 외부 서비스가 필요 없음
- 대량의 조인·집계 연산에 특화되어 있으며, 트랜잭션 중심 엔진(OLTP)보다 최대 100~1,000배 빠른 성능 제공
- 주요 사용 사례는 csv, parquet, json 등 대형 파일을 디스크에서 직접 읽어 일괄 처리(batch processing) 하는 경우
- 명령줄에서 간단히 CSV 파일을 조회하는 등 경량 데이터 탐색에도 활용 가능
주요 특징
속도
- DuckDB는 가장 빠른 오픈소스 데이터 처리 엔진 중 하나로 벤치마크에서 상위권 유지
- Polars, DataFusion, Spark, Dask 등과 비교 시, 소규모 데이터에서는 DuckDB가 우세, 대규모 데이터에서는 Spark·Dask가 경쟁력 있음
간단한 설치와 무의존성
- DuckDB는 단일 사전 컴파일 바이너리 형태로 제공되며, Python에서는 pip install duckdb로 즉시 설치 가능
-
의존성 없음으로 Spark 등 대형 프레임워크 대비 설치가 매우 간단
-
uv와 결합 시 1초 이내 Python 환경 구성 가능
CI 및 테스트
-
빠른 시작 속도와 경량성 덕분에 데이터 파이프라인의 CI·테스트 환경에 적합
- 과거 Spark 기반 테스트는 느리고 복잡했으나, DuckDB는 환경 설정 단순화와 프로덕션과의 일관성 유지가 용이
SQL 작성 경험
- DuckDB는 SQL 작성 및 구문 검증을 빠르게 수행 가능
- Spark 로컬 모드나 AWS Athena보다 즉시 실행 및 반복 개발에 유리
-
자동완성 기능을 갖춘 UI 제공
친화적인 SQL 문법
- DuckDB는 사용자 친화적 SQL 확장을 다수 포함
-
EXCLUDE, COLUMNS, QUALIFY, 윈도 함수 집계 수정자, 함수 체이닝(first_name.lower().trim()) 등 지원
- 이러한 기능은 복잡한 컬럼 선택·변환 작업을 간결하게 수행
다양한 파일 형식 지원
-
S3·웹 URL·로컬 파일 등에서 데이터를 직접 쿼리 가능
-
CSV 타입 엄격성 옵션을 제공해 비정형 입력 데이터로 인한 오류 방지
Python API
- Python에서 CTE 기반 파이프라인을 단계별로 정의하고, 각 단계 데이터를 손쉽게 점검 가능
-
duckdb.sql() 호출로 SQL을 체인 형태로 연결
-
지연 실행(lazy execution) 으로 성능 손실 없이 중간 결과 확인 가능
- 각 단계별 함수 테스트가 가능해 CI 테스트 효율성 향상
ACID 준수
- DuckDB는 대용량 데이터 작업에서도 완전한 ACID 보장
- 이 특성으로 Iceberg·Delta Lake 같은 레이크하우스 포맷의 중간 규모 대체재로 활용 가능
고성능 UDF 및 커뮤니티 확장
- C++로 고성능 사용자 정의 함수(UDF) 작성 가능
-
Community Extensions를 통해 INSTALL h3 FROM community 같은 명령으로 즉시 확장 설치 가능
- 예: 지리공간 데이터용 육각형 인덱싱(h3) 지원
문서화
- 전체 문서를 단일 Markdown 파일로 제공해 LLM 학습이나 코드 편집기 내 검색에 용이
- 코드 폴딩 기능으로 필요한 부분만 쉽게 복사 가능
실제 활용 및 효과
- 오픈소스 Splink 프로젝트에서 DuckDB를 기본 백엔드로 채택한 결과
-
사용자 문제 감소, 작업 속도 향상, 기능 개발·테스트 단순화 달성
주목할 확장 기능
-
PostgreSQL Extension: DuckDB에서 Postgres 데이터베이스를 직접 연결·쿼리 가능
-
pg_duckdb: Postgres 내부에 DuckDB 엔진을 임베드해 트랜잭션·분석 처리 병행 가능
- 향후 Postgres 인덱스 최적화 및 필터 푸시업 개선 후 광범위한 채택 가능성 있음