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

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 도구 통합을 내부적으로 해결해 사용자 경험을 단순화함