원문링크

https://debugginglife.hashnode.dev/delta-lake-apache-iceberg

들어가기 전에

전 회사에서는 Databricks와 Delta Lake를 사용하다가, 현 회사에서 Apache Iceberg를 주로 사용 중입니다. 처음엔 익히 들었던 것처럼 “별 다른 점이 없는 스토리지 포맷 아닌가?" 하고 금방 적응할 수 있을 거라 생각했는데, 생각보다 주요한 점들이 달랐습니다.

평소에 학습할 때, 기존에 알고 있는 개념과 연관지어 이해하는 걸 좋아하는 편이라 개념을 정리할 겸 iceberg 와 Delta Lake 에 대해 아래 항목에 대해서 정리해봤습니다.

1. 메타데이터: 완전히 다른 철학

Delta Lake - 단순한 메타데이터 및 트랜잭션 로그


Copy

Copy

table/
├── part-00001.parquet
├── part-00002.parquet
└──_delta_log/
    ├── 00000000000000000000.json
    ├── 00000000000000000001.json
    └── 00000000000000000010.checkpoint.parquet

Copy

Copy

// 00000000000000000001.json 내용
{
  "add": {
    "path": "part-00001.parquet",
    "partitionValues": {"date": "2024-01-01"},
    "size": 1024000,
    "stats": "{\\"numRecords\\":1000}"
  }
}

Delta Lake는 정말 심플합니다. _delta_log 폴더 하나에 모든 히스토리를 JSON으로 기록합니다.

각각의 JSON 은 버전을 의미하며, Version N = Version N-1 + Actions 공식으로 동작하죠.

각 버전별 메타데이터 정보에 대해서 빠짐없이 기록합니다. 또한 별도로 설정을 변경하지 않는 한 10개 커밋마다 Parquet checkpoint를 생성해서 성능을 최적화합니다.

Iceberg - 계층적 메타데이터


Copy