C.W.K.
Stream
Lesson 05 of 06 · published

Pandas vs Polars vs DuckDB vs SQL — 언제 뭘 쓸까

~13 min · foundation, tools, decision-framework

Level 0구경꾼
0 XP0/47 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

초보자 1번 실수는 가장 많이 거론되는 도구를 골라서 모든 문제를 거기 욱여넣는 거. 1번 프로 스킬은 앞에 있는 일의 모양에 맞는 도구를 고르는 거야. 작동하는 결정 프레임워크 여기 있어.

상황골라이유
탐색, <100M 행, 지저분한 mixed typePandas최대 ecosystem, 모든 분석 라이브러리가 받음, REPL 친화적.
같은 모양인데 노트북에서 100M10BPolars (lazy)Streaming 엔진, query optimizer, 병렬 실행. Pandas 는 OOM.
Parquet/Arrow 위에서 익숙한 SQL 분석DuckDBIn-process, 서버 없음, 파일 직접 query, 비용 대비 환상적인 성능.
이미 데이터가 Postgres/BigQuery/Snowflake 안에SQL (warehouse 안)꺼내고 다시 넣지 말고. 데이터 사는 곳에서 compute. 정리는 dbt 로.
Label 필요 없는 수치 무거운 작업NumPyPandas 보다 overhead 적음, vectorization 직통.
진짜 페타바이트 규모Spark / BigQuery / Snowflake이 quest 범위 밖. 원리는 그대로 transfer.

말 안 한 default

2026 에 처음부터 시작하고 데이터가 파일에 있다면: Parquet 으로 저장, DuckDB 로 query, 크기에 따라 Pandas 또는 Polars 로 manipulate, Pandera 로 검증. 이 stack 이 대부분의 실무자에게 대부분의 문제에서 — 한 머신에서 — 더 무거운 게 필요하기 전까지 몇 년을 버텨.

요점은 표 외우는 거 아니야. 이 일의 모양은 뭘까? 라고 물어보는 반사를 키우는 거 — import 치기 전에.

Code

같은 일, 네 도구 — 상황에 맞는 거·python
# 목표: 5GB Parquet 파일에서 월별 매출. 4가지 정당한 방법:

# 1. Pandas — 메모리에 들어감, Pandas 알면 가장 쉬움
import pandas as pd
df = pd.read_parquet('orders.parquet', columns=['order_date', 'amount_usd'])
pandas_result = (df.assign(month=lambda d: d['order_date'].dt.to_period('M'))
                   .groupby('month', as_index=False)['amount_usd'].sum())

# 2. Polars (lazy) — stream, 전체 파일 안 로드
import polars as pl
polars_result = (pl.scan_parquet('orders.parquet')
                   .group_by(pl.col('order_date').dt.truncate('1mo').alias('month'))
                   .agg(pl.col('amount_usd').sum())
                   .sort('month')
                   .collect())

# 3. DuckDB — 파일에 SQL 직격, DataFrame 안 로드
import duckdb
duck_result = duckdb.sql('''
    SELECT date_trunc('month', order_date) AS month,
           SUM(amount_usd) AS revenue
    FROM 'orders.parquet'
    GROUP BY 1 ORDER BY 1
''').to_df()

# 4. 진짜 warehouse 안의 pure SQL — 데이터 사는 곳에 두고
warehouse_sql = '''
    SELECT date_trunc('month', order_date) AS month, SUM(amount_usd) AS revenue
    FROM analytics.orders
    GROUP BY 1 ORDER BY 1
'''  # warehouse 클라이언트로 실행, 파일 소유는 dbt 가.

External links

Exercise

본인이 작업한 프로젝트 하나 (학교, 일, 사이드) 골라서 한 단락 rationale 적어 봐: 오늘 다시 한다면 네 도구 (Pandas / Polars / DuckDB / SQL-in-warehouse) 중 어느 것, 그리고 . 목표는 맞히는 게 아니라 반사 연습이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.