Skip to content

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 작업에 중점
    • 데이터 분석 및 쿼리 중심으로 설계된 시스템
  • DuckDB의 "쿼리-애니씽(Query-Anything)" 특성
    • 다양한 데이터 소스를 직접 SQL로 쿼리 가능:
      • CSV, TSV, JSON 등 일반 파일 형식
      • Parquet 등 고급 파일 형식 지원
    • 이 기능은 유연성을 제공하며, 예: Bluesky의 데이터 스트림 분석
  • 확장성 및 생태계
    • DuckDB에도 확장 기능이 존재하나, Postgres만큼 풍부하지 않음 (상대적으로 젊은 프로젝트)
    • 커뮤니티 기여 확장이 많이 있으며, gsheets(Google Sheets 연동)가 주목할 만함
  • DuckDB 활용 학습 권장
    • 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 - 데이터 처리 연산에 대한 크로스 플랫폼 교환 표준
  • Shaper - SQL로 데이터 시각화 및 공유 가능한 DuckDB 기반 Metabase 대체제

Favorite site

Articles

  • DuckDB Local UI 공개 | GeekNews
  • DuckDB에서 SQL 입력 즉시 결과를 제공하는 "Instant SQL" 공개 | GeekNews
    • [원문] 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 클라우드 서비스
  • 지난 10년간 가장 중요한 지리공간 소프트웨어로 부상한 DuckDB | GeekNews
    • DuckDB의 지리공간 확장 기능은 SQL 기반의 단순한 인터페이스로 지리공간 데이터 접근 장벽을 획기적으로 낮춤
    • 덕분에 일반 데이터 분석가들도 두 줄의 코드로 지리공간 분석이 가능해짐
    • 2023년 말 이후 'geospatial' 검색 관심도가 급증했으며, DuckDB의 확장 출시 시점과 일치함
    • Overture Maps 같은 최신 지리공간 프로젝트의 확산도 DuckDB의 영향력이 반영된 결과로 분석됨
    • DuckDB 팀은 복잡한 종속성과 GIS 도구 통합을 내부적으로 해결해 사용자 경험을 단순화함
  • DuckDB가 데이터 처리할 때 나의 첫 번째 선택인 이유 | GeekNews
    • [원문] Why DuckDB is my first choice for data processing
    • DuckDB는 단일 머신에서 대규모 테이블 데이터를 빠르고 간단하게 처리할 수 있는 오픈소스 SQL 엔진으로, 최근 데이터 엔지니어링에서 널리 사용됨
    • 설치가 간단하고 의존성이 없으며, Python 환경에서 즉시 실행 가능해 CI·테스트 자동화에 적합함
    • 분석 쿼리 최적화로 SQLite나 Postgres보다 최대 1,000배 빠른 성능을 보이며, 다양한 파일 형식(csv, parquet, json)을 직접 쿼리 가능
    • 친화적인 SQL 문법(EXCLUDE, COLUMNS, QUALIFY, 함수 체이닝 등)과 Python API를 통해 복잡한 파이프라인을 효율적으로 개발 가능
    • ACID 준수, 고성능 UDF, PostgreSQL 통합 확장 등으로 중간 규모 데이터의 레이크하우스 대안으로 부상 중