본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
DuckDB 고급 활용

시작과 기준선

포지셔닝과 적합한 워크로드버전·설치·런타임 기준연결·스토리지 모델실행 가능한 예제 번들

파일·레이크 분석

CSV·JSON 수집Parquet 레이크 모델링다중 파일·스키마 진화파티션 쓰기와 오브젝트 스토리지Lakehouse 포맷

분석 SQL·연동

Friendly SQL과 매크로시계열·분석 SQL중첩·반정형 데이터Python·Arrow·Polars·BIdbt·MotherDuck·Ibis 생태계Materialization·Index·통계

성능·운영

성능 프로파일링벤치마크·프로파일링 실습메모리·spill·실패 모드동시성·보안·운영보안 Hardening 체크리스트

부록

템플릿참고 자료검증 리포트업데이트 내역
핸드북›DuckDB 고급 활용›dbt·MotherDuck·Ibis 생태계

dbt·MotherDuck·Ibis 생태계

dbt-duckdb, MotherDuck, Ibis를 DuckDB 기반 분석 운영에 편입하는 기준과 한계를 정리합니다.

핵심 요약

  • dbt-duckdb, MotherDuck, Ibis는 무조건 도입할 도구가 아니라 DuckDB 운영 모델을 확장하는 선택지로 다룹니다.
  • dbt-duckdb는 warehouse 없이 로컬 .duckdb, :memory:, S3 Parquet source로 모델을 실행하지만 incremental external model 제한 때문에 증분 처리는 별도 설계가 필요합니다.
  • MotherDuck은 같은 SQL을 클라우드로 옮기지만 데이터 위치·권한·비용·장애 경계가 local DuckDB와 달라지니 별도 검토를 거쳐 도입합니다.
  • Ibis는 Python expression으로 DuckDB SQL을 생성하니 DBA가 검토하는 팀은 expr.compile()로 생성 SQL을 PR/CI artifact에 드러냅니다.
  • 도입은 DuckDB SQL 기준 확립 → dbt-duckdb 모델·테스트 → Ibis/Polars 연동 → 협업 필요 시 MotherDuck 순서로 진행합니다.

DuckDB core만으로도 많은 분석을 할 수 있지만, 팀 운영에 들어가면 변환 관리, 협업, 클라우드 공유, Pythonic API가 필요해집니다. 이 장에서는 dbt-duckdb, MotherDuck, Ibis를 "무조건 도입할 도구"가 아니라 DuckDB 운영 모델을 확장하는 선택지로 봅니다.

선택 기준

도구쓰기 좋은 경우주의할 점
dbt-duckdbSQL 모델, 테스트, 문서, lineage를 로컬 DuckDB로 관리external model과 :memory: 재실행 특성
MotherDuckDuckDB 분석을 클라우드 공유·협업·BI 연결로 확장local-only DuckDB와 비용·권한·데이터 위치가 달라짐
IbisPython expression으로 DuckDB SQL을 생성·실행SQL 리뷰와 backend portability의 균형

dbt-duckdb

dbt-duckdb는 DuckDB adapter입니다. 로컬 DuckDB file, :memory:, S3 Parquet source, external materialization을 활용해 warehouse 없이도 dbt 모델을 실행할 수 있습니다.

# profiles.yml
duckdb_analytics:
  target: dev
  outputs:
    dev:
      type: duckdb
      path: analytics.duckdb
      threads: 4

external source는 DuckDB file scan 문법으로 컴파일될 수 있습니다.

sources:
  - name: raw_lake
    meta:
      external_location: "s3://company-lake/raw/{name}.parquet"
    tables:
      - name: orders
      - name: customers

external materialization은 dbt 모델 결과를 Parquet/CSV/JSON 파일로 쓸 때 유용합니다. incremental external model은 제한이 있으니 증분 처리는 DuckDB table materialization이나 별도 orchestration으로 나눠 설계합니다.

MotherDuck

DuckDB의 motherduck extension은 MotherDuck 클라우드 warehouse에 연결합니다. 공식 DuckDB 문서는 ATTACH 'md:'로 연결하면 extension이 첫 사용 때 자동으로 설치·로드된다고 설명합니다.

INSTALL md;
LOAD md;
ATTACH 'md:';

SHOW DATABASES;

MotherDuck은 "로컬 DuckDB와 같은 SQL을 클라우드로 가져간다"는 점이 강점입니다. 하지만 운영 판단의 기준은 달라집니다.

항목local DuckDBMotherDuck
데이터 위치로컬/오브젝트 스토리지클라우드 서비스
권한OS/cloud credential 중심서비스 계정·조직 권한
비용로컬 리소스 중심서비스 과금
협업파일 공유·read-onlycloud sharing과 BI 연결
장애 경계로컬 process네트워크·서비스 가용성 포함

Ibis

Ibis는 DuckDB를 포함한 여러 backend로 SQL을 생성하는 Python dataframe API입니다. DuckDB 문서는 Ibis with DuckDB가 Pythonic interface와 좋은 성능을 제공한다고 설명합니다.

import ibis

con = ibis.connect("duckdb://analytics.duckdb")
orders = con.table("orders")

expr = (
    orders
    .group_by(["region", "plan"])
    .aggregate(revenue=orders.amount.sum())
)

print(expr.compile())
expr.execute()

Ibis에서는 Python 코드 리뷰와 SQL 리뷰가 섞입니다. DBA가 검토해야 하는 팀이라면 expr.compile()로 생성 SQL을 CI artifact나 PR에 드러내는 습관을 들이면 좋습니다.

통합 아키텍처

도입 순서

  1. DuckDB CLI/SQL로 파일 레이크 쿼리와 profiling 기준을 먼저 만든다.
  2. 반복 변환이 많아지면 dbt-duckdb로 모델·테스트·문서를 올린다.
  3. Python feature engineering이 많으면 Ibis나 Polars 연동을 표준으로 잡는다.
  4. 협업, BI 공유, 클라우드 실행이 필요해지면 비용·권한을 따로 검토해 MotherDuck을 도입한다.

참고 자료

  • dbt-duckdb GitHub
  • Fully Local Data Transformation with dbt and DuckDB
  • MotherDuck Extension
  • MotherDuck dbt integration
  • Integration with Ibis
  • Ibis DuckDB backend

관련 문서

참고 자료

DuckDB 고급 활용 핸드북의 공식 문서·릴리스 근거 모음

업데이트 내역

DuckDB 고급 활용 핸드북 변경 로그

Python·Arrow·Polars·BI

Python API, Arrow zero-copy, Pandas/Polars replacement scan, BI 연결을 실무 분석 흐름으로 정리합니다.

Materialization·Index·통계

CTAS, persistent table, zonemap, ART index, ANALYZE를 DuckDB 성능 판단으로 연결합니다.

On this page

선택 기준dbt-duckdbMotherDuckIbis통합 아키텍처도입 순서참고 자료