Default 가 돼야 할 포맷
Apache Parquet 은 Hadoop 에서 태어난 columnar binary 파일 포맷인데, 이젠 분석 세계 어디에나 있어. 컬럼마다 데이터를 따로 압축한 청크로 담고, 풍부한 통계 (min/max/null-count) 를 함께 저장하고, footer 덕분에 reader 가 filter predicate 만 보고 row group 을 통째로 건너뛸 수 있어. 결과: 100GB 파일에서 몇 컬럼만 읽는 query 는 필요한 byte 만 만지고, 압축 해제 비용도 딱 그만큼만 내.
CSV 대비 공짜로 받는 것
- Type. Schema 가 파일의 일부야.
amount_usd는double,order_date는timestamp[us]— 읽을 때 추측이 없어. - 압축. Snappy 가 default 고,
zstd는 비슷한 속도에 비율이 보통 2–3× 좋아. 10GB CSV 가 1–2GB Parquet 이 되는 일이 흔해. - Column pruning. 50컬럼 파일에서
order_date와amount_usd만 읽으면 나머지 48개는 건드리지도 않아. - Predicate pushdown.
WHERE country = 'KR'이면 row-group 통계만 보고'KR'이 있을 수 없는 그룹을 통째로 넘겨. - Splittable. Reader 여럿이 서로 다른 row group 을 병렬로 처리할 수 있어.
Partitioning — 그 다음 수
Parquet writer 는 논리적 "테이블" 하나를 orders/year=2026/month=4/data.parquet 같은 디렉토리 트리로 쪼갤 수 있어. Reader 는 파일을 열기도 전에 partition 째로 걸러내. 여기에 column pruning 과 predicate pushdown 을 얹으면, 머신 한 대의 DuckDB 로 수백 GB 에 sub-second query 가 나와.