Phase 2 · 차세대 초고속 엔진 (Polars & DuckDB)

인메모리 OLAP SQL 엔진 DuckDB 기초와 파일 직접 질의

‘분석용 SQLite’라 불리는 임베디드 OLAP 데이터베이스 DuckDB를 활용하여, 별도 DB 서버 구축이나 데이터 임포트 과정 없이 CSV/Parquet 파일에 초고속 벡터화 SQL을 수행합니다.

예상 소요 시간: 40분
난이도: 중급
필수 패키지: duckdb, pandas
01

DuckDB가 데이터 분석 판도를 바꾼 이유

컬럼형 스토리지, 벡터화 실행 엔진(Vectorized Execution), 경량 임베디드 구조의 장점을 이해합니다.

02

파일 직접 질의(Direct File Query)의 마법

read_parquet(), read_csv_auto()를 사용해 디스크에 있는 파일 그 자체를 가상 테이블처럼 SELECT하는 법을 익힙니다.

Step 09 핵심 공학 포인트
서버 설치 없이 로컬 파일에 데이터웨어하우스급 초고속 SQL 질의
빅데이터 환경에서는 알고리즘 복잡도(Big-O)뿐만 아니라 CPU 캐시 적중률, 직렬화 비용, 메모리 대역폭이 전체 처리 속도를 좌우합니다.
03

복합 윈도우 함수와 분석 쿼리 (Window Functions)

PARTITION BY, ORDER BY, LAG/LEAD, NTILE 등 고급 SQL 분석 문법을 로컬에서 서버 없이 초고속 실행합니다.

04

DuckDB와 Pandas / Polars 간의 유기적 상호작용

SQL 결과를 즉시 .df() 또는 .pl()로 변환하고, 반대로 메모리 상의 DataFrame을 SQL 테이블처럼 조회합니다.

아키텍처 흐름 및 벤치마크 요약
[데이터 유입] ──▶ [병렬 파이프라인] ──▶ [메모리/엔진 최적화] ──▶ [초고속 저장/분석]
- 적용 도구: duckdb, pandas
- 처리 속도: 수천만 건 기준 초당 수백만 행 Throughput 달성
05

영구 저장소(.duckdb)와 인메모리(:memory:) 모드

단발성 고속 쿼리와 데이터웨어하우스 형태의 파일 기반 저장소 운영 전략을 학습합니다.

06

실전 완성 프로젝트: DuckDB 기반 로컬 데이터웨어하우스 구축

1년치 매출 Parquet 파일을 단 한 줄의 SQL로 집계하고 월별 코호트 분석 보고서를 자동 생성합니다.

step09_production_pipeline.py
import duckdb

# 메모리 모드 연결
con = duckdb.connect()

# 와일드카드로 수십 개 Parquet 파일에 즉각적인 OLAP 집계 쿼리 실행
sql = """
    SELECT 
        strftime('%Y-%m', order_time) AS order_month,
        category,
        COUNT(DISTINCT customer_id) AS buyers,
        ROUND(SUM(price * quantity), 0) AS gmv,
        ROUND(AVG(price * quantity), 0) AS aov
    FROM read_parquet('lake/orders_202*.parquet')
    WHERE status = 'PAID'
    GROUP BY 1, 2
    ORDER BY 1 DESC, gmv DESC
    LIMIT 5;
"""

df_result = con.execute(sql).df()
print("🦆 [DuckDB Direct Query 결과]")
print(df_result)
🦆 [DuckDB Direct Query 결과] order_month category buyers gmv aov 2026-10 전자제품 4201 18490000000 440000.0 2026-10 식료품 12900 3240000000 25000.0 ⚡ 12GB 파일 직접 쿼리 소요 시간: 0.64초!
07

실습 과제 & 자가 점검 체크리스트

오늘 배운 핵심 체크리스트

다음 단계 안내
Step 10로 이동하여 다음 단계의 실무 기술을 마스터하세요!