본문 바로가기
Database2026년 4월 27일9분 읽기

ClickHouse vs DuckDB — OLAP 분석 워크로드 선택 가이드

YS
김영삼
조회 2
ClickHouse vs DuckDB — OLAP 분석 워크로드 선택 가이드

핵심 요약

OLAP은 PostgreSQL·MySQL 같은 OLTP DB로는 한계. column-oriented + 압축으로 100배 빠른 쿼리. 2026년 시점 두 표준 — ClickHouse (서버형 대규모) vs DuckDB (임베디드 단일 노드).

  • ClickHouse 25.x: 페타바이트 분산
  • DuckDB 1.0+ (2024): 단일 머신, 경량, Postgres 대비 100배
  • 둘 다 SQL, columnar storage, 거의 무료 (오픈소스)

1. 핵심 차이

항목ClickHouseDuckDB
아키텍처분산 서버임베디드 (in-process)
설치서버 클러스터라이브러리 import
데이터 규모PB 가능~1TB 한계
동시 사용자수천명1명 (단일 프로세스)
운영 부담중간 (자체 호스팅)없음
학습 곡선가파름매우 단순

2. DuckDB — 단일 노드

# Python
pip install duckdb

import duckdb
conn = duckdb.connect('mydb.duckdb')

# CSV 직접 읽기
result = conn.sql("SELECT * FROM 'sales.csv' WHERE amount > 100")

# Parquet
result = conn.sql("SELECT user_id, SUM(amount) FROM 's3://bucket/data/*.parquet' GROUP BY user_id")

# Pandas DataFrame 직접
import pandas as pd
df = pd.read_csv('sales.csv')
result = conn.sql("SELECT * FROM df WHERE amount > 100").df()

3. DuckDB 강점

  • 설치·운영 0 — 라이브러리 import만
  • Pandas·Arrow·Parquet 네이티브
  • S3·HTTP·HDFS 직접 쿼리
  • 단일 머신에서 1TB까지 즉시 처리
  • Postgres·MySQL extension으로 직접 조회

4. ClickHouse — 분산

# 설치
curl https://clickhouse.com/ | sh
./clickhouse server

# 또는 Docker
docker run -d -p 8123:8123 clickhouse/clickhouse-server
-- 테이블 생성
CREATE TABLE events (
    event_time DateTime,
    user_id UInt64,
    event_type LowCardinality(String),
    payload JSON
) ENGINE = MergeTree
PARTITION BY toYYYYMM(event_time)
ORDER BY (event_time, user_id);

-- 1억 행 INSERT (수십 초)
-- 분석 쿼리 — 1억 행 GROUP BY 1초
SELECT event_type, count(*)
FROM events
WHERE event_time >= now() - INTERVAL 7 DAY
GROUP BY event_type;

5. ClickHouse 강점

  • PB 규모 분산 처리
  • 실시간 INSERT (초당 수백만)
  • materialized view·projections으로 자동 사전 계산
  • S3·Kafka·Postgres CDC 통합
  • SQL 표준 + 풍부한 함수

6. 성능 비교 (1억 행 GROUP BY)

DB시간
PostgreSQL (인덱스 있음)30초
DuckDB (single core)1.2초
DuckDB (8 core)0.3초
ClickHouse (단일 노드)0.4초
ClickHouse (3노드 분산)0.15초

7. 의사결정 매트릭스

워크로드1순위
로컬 데이터 분석 (10GB~1TB)DuckDB
Jupyter notebook 분석DuckDB
실시간 대시보드 (다중 사용자)ClickHouse
로그 분석 (TB 이상)ClickHouse
이벤트 트래킹 (실시간)ClickHouse
임시 분석·POCDuckDB
메타프레임워크 (지표 백엔드)ClickHouse

8. 통합 패턴 — DuckDB on Iceberg

import duckdb

conn = duckdb.connect()
conn.execute("INSTALL iceberg; LOAD iceberg;")

result = conn.sql("""
  SELECT user_id, COUNT(*)
  FROM iceberg_scan('s3://lakehouse/events')
  WHERE event_time >= '2026-04-01'
  GROUP BY user_id
""").df()

S3에 있는 Iceberg 테이블을 DuckDB로 직접 분석. Snowflake·Databricks 대안.

9. ClickHouse + Kafka 실시간

CREATE TABLE events_kafka (
    user_id UInt64,
    event_type String,
    payload String
) ENGINE = Kafka
SETTINGS kafka_broker_list = 'kafka:9092',
         kafka_topic_list = 'events',
         kafka_group_name = 'clickhouse',
         kafka_format = 'JSONEachRow';

CREATE MATERIALIZED VIEW events_mv
TO events AS
SELECT user_id, event_type, payload, now() AS event_time
FROM events_kafka;

-- Kafka 메시지가 자동으로 ClickHouse로 적재

10. DuckDB UDF·Extension

# Python UDF
def classify(x):
    return "A" if x > 100 else "B"

conn.create_function("classify", classify)
result = conn.sql("SELECT classify(amount) FROM sales")

11. 운영 — ClickHouse

  • ZooKeeper 또는 ClickHouse Keeper로 클러스터 조정
  • S3 backed storage로 무한 확장
  • materialized views 신중히 (write 비용 증가)
  • 스키마 변경은 ALTER TABLE — 빠르지만 metadata 격리 필요
  • backup — clickhouse-backup tool

12. 운영 — DuckDB

  • 단일 파일 (.duckdb) — 백업 = 파일 복사
  • concurrent write 안 됨 (read 동시 OK)
  • 큰 데이터는 partitioned Parquet으로 권장
  • 대시보드 임베드 (motherduck SaaS)

13. SQL 호환

-- ClickHouse: 표준 SQL + 자체 함수
SELECT toStartOfMinute(event_time), count() FROM events GROUP BY 1

-- DuckDB: PostgreSQL 호환 (대부분)
SELECT date_trunc('minute', event_time), count(*) FROM events GROUP BY 1

DuckDB가 PG 호환성 강함. ClickHouse는 자체 함수 풍부.

14. 비용 비교 (1TB 데이터, 10K 쿼리/일)

옵션월 비용
Snowflake~$2,500
BigQuery on-demand~$1,200
ClickHouse Cloud~$600
self-hosted ClickHouse~$200 (EC2)
DuckDB on EC2~$50

15. 함께 쓰는 패턴

  • ClickHouse: production 대시보드·로그·이벤트
  • DuckDB: ad-hoc 분석·Jupyter·CI에서 ETL 검증
  • Iceberg: 데이터 single source, 둘 다 직접 쿼리

자주 묻는 질문

1TB 미만은 DuckDB 충분?대부분 그렇다. 단 다중 사용자 동시 쓰기는 ClickHouse 필요.

실시간 INSERT 성능?ClickHouse가 압도. 초당 100만+ 행. DuckDB는 단일 사용자라 한계.

운영 부담 비교?DuckDB ~ 0. ClickHouse ~ Postgres 운영 + 추가 (replica·backup·shard).

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록