어제 Athena와 Redshift로 데이터를 읽었다. 그런데 같은 데이터라도 어떻게 저장하느냐에 따라 쿼리 비용이 50배 차이 나고, 학습 속도가 몇 배 갈린다. 저장은 "어디에 두느냐"의 문제가 아니라 "읽는 쪽이 빠르고 싸게 읽을 수 있게 미리 배치하느냐"의 문제다.
오늘은 ML 데이터 저장의 세 기둥 — 파티셔닝, 파일 포맷 최적화, 그리고 SageMaker 학습으로 데이터를 넘기는 준비 — 를 본다. MLA-C01 도메인 1에서 저장 전략은 비용·성능을 묻는 시나리오로 꾸준히 출제된다.
파티셔닝은 데이터를 특정 키(보통 날짜)로 폴더로 쪼개 저장하는 것이다. 쿼리가 WHERE 조건으로 필요한 파티션만 읽으면, 나머지는 스캔하지 않는다 — 이를 **파티션 프루닝(partition pruning)**이라 한다.
s3://ml-datalake/events/
├─ year=2026/month=05/day=01/part-0000.parquet
├─ year=2026/month=06/day=24/part-0000.parquet
└─ year=2026/month=06/day=25/part-0000.parquet ← WHERE day='25'면 이것만 스캔
year=, month= 같은 키=값 형식의 폴더 이름을 Hive 스타일 파티셔닝이라 부른다