DuckDB
DuckDB is an embeddable SQL OLAP database management system.
Features
- SQLite for Analytics
- 복잡한 분석쿼리에 최적화된 임베디드 RDBMS
- C++11로 작성된 의존성 없는 싱글 바이너리로 호스트 프로세스내에서 실행
- Python/R/Java/C/C++/Node.js API 제공
- SQLite 처럼 한개의 파일에 DB저장
- 적합한 Usecase
- CSV/Parquet 등의 tabular 데이터 처리 및 저장
- 여러 큰 테이블들을 Join & Agggreate 하는 인터랙티브 데이터 분석
- 여러개의 대형 테이블에 동시에 큰 변경을 할 때 (여러 줄을 추가 또는 컬럼 추가/삭제/변경 등)
2025년을 위한 7개의 데이터베이스 중 하나
- Database#2025년을 위한 7개의 데이터베이스 (GeekNews) 참조
- DuckDB는 OLAP에 특화된 임베디드 데이터베이스
- SQLite처럼 애플리케이션과 함께 작동하지만 OLTP 대신 OLAP 작업에 중점
- 데이터 분석 및 쿼리 중심으로 설계된 시스템
- 다양한 데이터 소스를 직접 SQL로 쿼리 가능:
- CSV, TSV, JSON 등 일반 파일 형식
- Parquet 등 고급 파일 형식 지원
- 이 기능은 유연성을 제공하며, 예: Bluesky의 데이터 스트림 분석
- DuckDB에도 확장 기능이 존재하나, Postgres만큼 풍부하지 않음 (상대적으로 젊은 프로젝트)
- 커뮤니티 기여 확장이 많이 있으며, gsheets(Google Sheets 연동)가 주목할 만함
- Python 노트북이나 Evidence를 통해 데이터 분석 및 처리 실험
- SQLite와 결합: SQLite 데이터베이스의 분석 쿼리를 DuckDB로 위임해 성능 향상
DuckDB를 활용한 데이터 과학: 복잡한 파일 환경 길들이기
Alex Monahan의 발표 영상에서는 오픈소스 분석 데이터베이스 라이브러리인 DuckDB가 데이터 과학자들이 다양하고 정돈되지 않은 데이터 파일을 관리하고 분석하는 데 어떻게 도움을 줄 수 있는지 설명합니다.
- 파일 동물원 문제: 데이터 과학자들은 CSV, Parquet, 스프레드시트 등 다양한 형식의 수많은 파일들을 다루며, 이들은 여러 위치와 클라우드 플랫폼에 흩어져 있을 수 있습니다. 이러한 파일들은 크기가 크고, 개수가 많으며, 정돈되지 않았거나 손상되기 쉽습니다.
- DuckDB 개요: DuckDB는 "분석을 위한 SQLite"로 소개됩니다. 오픈소스(MIT 라이선스)이며, 분석 워크로드를 위해 설계된 인-프로세스(임베디드) 데이터베이스입니다. 의존성 없이 pip install duckdb로 쉽게 설치할 수 있으며, Python 스크립트나 노트북 내에서 직접 사용할 수 있습니다.
- 다양한 파일 읽기: DuckDB는 S3와 같은 클라우드 저장소의 파일을 포함하여 광범위한 파일 형식을 읽을 수 있습니다. 특히 강력한 CSV 리더는 실제 지저분한 CSV 파일을 처리하는 데 뛰어나며, 문제가 있는 파일을 성공적으로 파싱하는 능력에서 다른 많은 도구를 능가합니다.
- 친숙한 SQL 및 관계형 API: DuckDB는 사용자 친화적인 SQL 인터페이스(예: SELECT *는 선택 사항)와 Python 스타일의 관계형 API를 제공합니다. 파일을 마치 테이블인 것처럼 직접 쿼리할 수 있으며, 필요할 때만 데이터를 읽는 지연(lazy) 방식으로 작동합니다.
- 상호 운용성: Pandas 및 Polars와 같은 인기 있는 데이터 과학 라이브러리와 원활하게 통합되며, 동일한 프로세스에서 실행되기 때문에 제로 카피(zero-copy) 데이터 교환이 가능합니다.
- DuckDB 파일 형식: 기본 DuckDB 파일 형식은 여러 테이블, 뷰, SQL 함수 및 관계를 저장할 수 있는 단일 컬럼 기반 압축 파일입니다. 이 형식은 편집 가능하고 ACID 속성을 지원하며 속도와 효율성을 위해 설계되었습니다.
- ACID 속성: DuckDB는 원자성(전부 아니면 전무 변경), 일관성(키를 사용하여 데이터 품질 문제 방지), 격리성(동시 쿼리가 서로 간섭하지 않음), 지속성(커밋된 데이터는 손상으로부터 안전함)을 통해 데이터 과학 워크플로에 데이터베이스의 견고성을 제공합니다.
- 사용 사례: 데이터를 단일하고 효율적이며 쿼리 가능한 형식으로 통합하여 "파일 동물원"을 길들이는 데 유용합니다. 또한 반복적인 데이터 과학 작업 중에 새로운 파일 동물원이 생성되는 것을 방지하는 데 도움이 됩니다.
- 커뮤니티 및 확장성: DuckDB는 확장 가능하며, 커뮤니티 기여를 통해 통계 패키지 파일 및 Google Sheets와 같은 형식에 대한 지원이 추가되고 있습니다.
DuckDB Labs 및 MotherDuck(DuckDB 기반 클라우드 데이터 웨어하우스)에서 근무하는 Alex Monahan은 DuckDB가 데이터베이스의 강력함과 데이터 과학에 필요한 유연성을 결합하여 데이터 과학자를 위한 데이터 처리를 단순화하는 것을 목표로 한다고 강조했습니다.
See also
- SQLite
- DuckDB
- Realm
- big data
- OLAP
- Lance - ML 워크플로우에 최적화된 최신 Columnar 데이터 포맷
- Substrait - 데이터 처리 연산에 대한 크로스 플랫폼 교환 표준
Favorite site
Articles
- [원문] Instant SQL is here: Speedrun ad-hoc queries as you type - MotherDuck Blog
- Instant SQL은 SQL 쿼리를 작성할 때 결과를 실시간으로 미리보기하여 쿼리 작성 및 디버깅을 가속화하는 도구
- 복잡한 CTE나 컬럼 수식을 손쉽게 분해하고 분석할 수 있으며, AI 기반 편집 제안을 즉시 미리볼 수 있어, 쿼리 작성 및 수정이 더욱 효율적임
- MotherDuck과 DuckDB Local UI에서 사용 가능하며, DuckDB 기반으로 다양한 외부 데이터 소스까지 실시간 탐색 가능
- DuckDB의 로컬 우선 설계와 성능 최적화, 캐싱 전략, AST 기반 커서 매핑 등 고급 기술 조합 덕분에 실현 가능했음
- MotherDuck은 데이터 분석을 위한 다양한 도구를 제공하는 관리형 DuckDB 클라우드 서비스
- DuckDB의 지리공간 확장 기능은 SQL 기반의 단순한 인터페이스로 지리공간 데이터 접근 장벽을 획기적으로 낮춤
- 덕분에 일반 데이터 분석가들도 두 줄의 코드로 지리공간 분석이 가능해짐
- 2023년 말 이후 'geospatial' 검색 관심도가 급증했으며, DuckDB의 확장 출시 시점과 일치함
- Overture Maps 같은 최신 지리공간 프로젝트의 확산도 DuckDB의 영향력이 반영된 결과로 분석됨
- DuckDB 팀은 복잡한 종속성과 GIS 도구 통합을 내부적으로 해결해 사용자 경험을 단순화함