Apache Iceberg 는 오브젝트 스토리지나 HDFS 에 놓인 대용량 분석 테이블을 다루는 테이블 형식(table format) 이다. 파일을 담는 형식(Parquet · ORC · Avro)이 아니라, 그 파일들을 하나의 테이블로 묶어 스키마와 스냅샷을 관리하는 층이다.
Hive 테이블이 디렉터리 목록으로 파티션을 표현하던 방식의 한계 — 느린 파티션 나열, 원자적이지 않은 쓰기, 스키마 변경의 위험 — 를 메타데이터 파일로 해결한다. Netflix 에서 시작해 2020년 Apache 최상위 프로젝트가 됐다.
| 기능 | 내용 |
|---|---|
| 스냅샷 격리 | 쓰기가 원자적이다. 읽는 쪽은 커밋이 끝난 스냅샷만 본다 |
| 시간 여행 | 과거 스냅샷을 그대로 질의한다 (FOR TIMESTAMP AS OF) |
| 스키마 변경 | 컬럼 추가 · 삭제 · 이름 변경 · 순서 변경이 데이터 재작성 없이 된다. 컬럼을 ID 로 추적하기 때문이다 |
| 숨은 파티셔닝 | 파티션 컬럼을 질의에 쓰지 않아도 pruning 이 된다. 파티션 규칙을 테이블이 갖는다 |
| 파티션 진화 | 파티션 기준을 바꿔도 옛 데이터를 다시 쓰지 않는다 |
| 행 수준 변경 | UPDATE · DELETE · MERGE. copy-on-write 와 merge-on-read 중 고른다 |
카탈로그 (Hive Metastore · JDBC · REST · Glue · Nessie)
└ 테이블 메타데이터 (metadata.json) — 스키마 · 파티션 명세 · 스냅샷 목록
└ 매니페스트 목록 (manifest list) — 스냅샷 하나가 가리키는 매니페스트들
└ 매니페스트 (manifest) — 데이터 파일 목록과 통계
└ 데이터 파일 (Parquet · ORC · Avro)
질의 엔진은 카탈로그에서 현재 스냅샷을 찾고, 매니페스트의 통계로 읽을 파일을 추린 뒤 그 파일만 읽는다. 디렉터리를 나열하지 않으므로 파티션이 수만 개여도 계획 수립이 느려지지 않는다.
| 계열 | 상태 |
|---|---|
| 1.11 | 현행. 최신 1.11.0[1] |
| 1.10 | 유지보수. 최신 1.10.2 |
테이블 형식 명세(format version)는 별개다. v2 가 행 수준 삭제를 도입했고, v3 가 deletion vector 와 기본값 등을 더한다. 엔진마다 지원하는 명세 버전이 다르므로 쓰기 전에 확인한다.
| 엔진 | 비고 |
|---|---|
| Trino | iceberg 커넥터. 카탈로그 종류를 고른다 |
| Impala | Hive Metastore 카탈로그 기준 |
| Hive | 4.x 에서 통합 |
| Spark | iceberg-spark-runtime 확장 |
| Flink · NiFi | 커넥터 제공 |
UPDATE · DELETE · MERGE INTO 를 걸었을 때 "지원하지 않는다"는 오류가 나거나, 갱신…최신 버전 1.11.0 — 2026-09-20 확인. https://iceberg.apache.org/releases/ ↩︎