В прошлом посте разобрал, почему compute уехал отдельно от storage. Остался висящий хвост: данные в S3, а как там делать UPDATE, откатить кривой DAG, поменять схему без перезаливки 50 ТБ?
В DWH за это отвечала база. В озере на S3 — никто. До Iceberg.
🦖 Жизнь до этого: Hive
Hive table format = «папка в S3 это таблица, подпапки — партиции». Метаданные — только список путей.
Что не так:🔴
• Никакого ACID. Пайплайн упал на середине — читатели видят битые данные.
• Schema evolution через боль. Поменять тип колонки = переписать таблицу.
• Партиции зашиты в путь. Сменить схему партиционирования — перезаливай всё.
• Planner делает
LIST по S3. На миллионе партиций умирает.• UPDATE/DELETE нет. GDPR-удаление = читай партицию, фильтруй, перезаписывай.
☁️ Что сделал Iceberg
Не движок и не сторадж. Спецификация метаданных поверх обычных Parquet.
Слои:
- Каталог (Glue/Polaris/Unity/Nessie) — указатель на текущий metadata.json.
- metadata.json — схема, партиции, список снапшотов.
- Manifest list → manifest → data files (Parquet) со статистикой по колонкам.
Любая запись = новый metadata.json + атомарная замена указателя в каталоге. Старые файлы остаются. На этом построено всё:
🟢 ACID. Запись видна целиком или не видна. Конкуренция разруливается через optimistic concurrency на уровне каталога.
🟢 Time travel.
SELECT ... FOR VERSION AS OF 12345. Откат на снапшот без бэкапов.🟢 Schema evolution. Колонки идентифицируются по ID, переименование/смена типа — правка metadata.json, данные не трогаются.
🟢 Hidden partitioning. Партиции в метаданных. Меняешь
day → hour через ALTER, старые данные не переписываешь.🟢 Pruning без LIST. Planner читает manifest и сразу знает нужные файлы.
🟢 Branching/tagging как в git.
🛠 Что это значит для DE
Vendor lock-in мёртв. Один датасет в S3 одновременно читают Snowflake, Databricks, Trino, DuckDB, BigQuery — и видят одно и то же.
Война форматов закончилась. Snowflake купил Tabular, Databricks open-source-нул Unity Catalog, AWS выкатил S3 Tables (это Iceberg под капотом).
Индустрия сошлась на одном формате впервые за 15 лет.
⚖️ Где не подходит
• OLTP не закроет: каждая запись = коммит в каталог, это десятки миллисекунд. Частые мелкие апдейты убьют через write amplification.
Iceberg для аналитики, истории, ML-фич, маркетов — то есть 80% работы DE.
Используете в проде? На каком каталоге — Glue, Unity, Polaris, своё? Делитесь в комментах 👇
#data_engineering #iceberg #lakehouse #s3 #dj_architecture #DataJungle