Apache Iceberg — the friendly introApache Iceberg — дружелюбное введение

What a "table format" is and why it turns a pile of files into a real table. Plain words, no anchors. When comfortable, switch to Advanced. Что такое «табличный формат» и почему он превращает кучу файлов в настоящую таблицу. Простыми словами. Когда станет комфортно, переключайся на Advanced.
🟢 BeginnerНовичок 🔴 AdvancedПродвинутый

1. What is Iceberg?1. Что такое Iceberg?

Apache Iceberg is a table format for data lakes. You have lots of data files (usually Parquet) sitting in cloud storage like S3. On their own, those are just files. Iceberg adds a layer of metadata on top that makes the whole pile behave like one proper table — one you can safely query, update, and change over time.

Apache Iceberg — это табличный формат для озёр данных. У тебя в облачном хранилище (например S3) лежит много файлов с данными (обычно Parquet). Сами по себе это просто файлы. Iceberg добавляет сверху слой метаданных, который заставляет всю кучу вести себя как одна нормальная таблица — которую можно безопасно запрашивать, обновлять и менять со временем.

AnalogyАналогия A folder full of spreadsheet files is not a database. Iceberg is like a smart index card catalog placed over that folder: it tracks exactly which files belong to the table right now, what the columns are, and what the table looked like yesterday — so tools can treat it as one clean table. Папка с кучей файлов-таблиц — это ещё не база данных. Iceberg — как умный каталог-картотека поверх этой папки: он отслеживает, какие именно файлы сейчас входят в таблицу, какие колонки, и как таблица выглядела вчера — чтобы инструменты видели одну чистую таблицу.
One lineОдной строкой Iceberg = metadata that turns a folder of files into a reliable, versioned table with transactions, time travel, and safe schema changes. Iceberg = метаданные, превращающие папку файлов в надёжную версионируемую таблицу с транзакциями, time travel и безопасными изменениями схемы.

2. Table format vs file format2. Табличный формат vs формат файла

These are easy to confuse but very different:

Их легко перепутать, но они очень разные:

File format (Parquet, ORC)Table format (Iceberg)
DescribesHow one file stores rows & columnsHow many files form one table
Knows aboutColumns, compression inside the fileWhich files are in the table, schema history, snapshots, partitions
Think of it asOne pageThe book + its table of contents
Формат файла (Parquet, ORC)Табличный формат (Iceberg)
ОписываетКак один файл хранит строки и колонкиКак много файлов образуют одну таблицу
Знает проКолонки, сжатие внутри файлаКакие файлы входят в таблицу, историю схемы, снапшоты, партиции
Как думатьОдна страницаКнига + её оглавление
They work togetherОни работают вместе Iceberg doesn't replace Parquet — it organizes Parquet files into a table. Your data still lives in Parquet; Iceberg manages the table around it. Iceberg не заменяет Parquet — он организует Parquet-файлы в таблицу. Данные по-прежнему в Parquet; Iceberg управляет таблицей вокруг них.

3. The problems it solves3. Какие проблемы он решает

Before table formats, a "table" in a data lake was just a folder of files (the old Hive way). That caused real pain:

До табличных форматов «таблица» в озере данных была просто папкой файлов (старый подход Hive). Это давало реальную боль:

  • No safe updates. A reader could see half-written data while a job was still writing.
  • Listing files was slow. Finding the right files meant scanning the whole directory.
  • Schema changes were scary. Renaming or reordering a column could silently corrupt reads.
  • No history. Once you overwrote data, the old version was gone — hard to debug or roll back.
  • Нет безопасных обновлений. Читатель мог увидеть полузаписанные данные, пока джоб ещё пишет.
  • Перечисление файлов медленное. Найти нужные файлы — значит просканировать всю директорию.
  • Изменения схемы пугали. Переименование или перестановка колонки могли тихо испортить чтение.
  • Нет истории. Перезаписал данные — старая версия исчезла; трудно отлаживать и откатывать.
Iceberg's promiseОбещание Iceberg Make a data-lake table behave like a real database table: reliable, versioned, changeable — while keeping data as cheap open files in your own storage. Сделать таблицу в озере данных как настоящую таблицу в БД: надёжной, версионируемой, изменяемой — оставляя данные дешёвыми открытыми файлами в твоём хранилище.

4. The key features (what to remember)4. Ключевые возможности (что запомнить)

① ACID transactions (atomic commits)① ACID-транзакции (атомарные коммиты)

A write either fully appears or not at all. Readers always see a complete, consistent version — never a half-written mess. Multiple jobs can write without corrupting each other.

Запись либо появляется целиком, либо никак. Читатели всегда видят полную согласованную версию — никогда полузаписанный хаос. Несколько джобов могут писать, не портя друг друга.

② Snapshots & time travel② Снапшоты и time travel

Every change creates a new snapshot (a version of the table). You can query the table as of a past snapshot or timestamp, and roll back if a bad job wrote garbage.

Каждое изменение создаёт новый снапшот (версию таблицы). Можно запросить таблицу на момент прошлого снапшота или времени и откатиться, если плохой джоб записал мусор.

③ Schema evolution③ Эволюция схемы

Add, drop, rename, or reorder columns safely. Iceberg tracks columns by a hidden id, not by position or name, so old data still reads correctly after a change.

Безопасно добавлять, удалять, переименовывать, переставлять колонки. Iceberg отслеживает колонки по скрытому id, а не по позиции или имени, поэтому старые данные читаются верно после изменения.

④ Hidden partitioning④ Скрытое партиционирование

Iceberg remembers how the table is partitioned (e.g. by day) and applies it automatically. You query WHERE event_time > ... and it skips irrelevant files — you don't have to add a manual WHERE partition_day = ... and you can't forget it.

Iceberg помнит, как таблица партиционирована (например по дню), и применяет это автоматически. Ты пишешь WHERE event_time > ..., а он пропускает ненужные файлы — не нужно вручную добавлять WHERE partition_day = ... и нельзя про это забыть.

⑤ Engine-agnostic & open⑤ Не привязан к движку, открытый

Spark, Flink, Trino and others can all read and write the same Iceberg table. Your data isn't locked into one vendor's product.

Spark, Flink, Trino и другие могут читать и писать одну и ту же таблицу Iceberg. Твои данные не заперты в продукте одного вендора.

5. How it works (high level)5. Как он устроен (в целом)

Iceberg keeps a small tree of metadata files that point down to your data files. A query reads the metadata first to figure out exactly which data files it needs — and skips the rest.

Iceberg держит небольшое дерево метаданных, указывающее вниз на твои файлы данных. Запрос сначала читает метаданные, чтобы понять, какие именно файлы данных нужны — а остальные пропускает.

catalog ──▶ metadata file (current snapshot, schema) └──▶ manifest list (which manifests are in this snapshot) └──▶ manifest (lists data files + stats: min/max, row counts) └──▶ data files (Parquet) ◀── your actual rows
A commit = a new snapshotКоммит = новый снапшот Writing data creates new data files, then writes new metadata pointing to a new snapshot, then atomically swaps the "current" pointer. Readers in flight keep using the old snapshot; new readers see the new one. That swap is what makes it safe. Запись создаёт новые файлы данных, затем пишет новые метаданные с новым снапшотом и атомарно переключает указатель «текущий». Уже работающие читатели продолжают со старым снапшотом; новые видят новый. Именно это переключение и делает всё безопасным.

The min/max stats in manifests let Iceberg skip whole files that can't match your filter — fast queries without scanning everything.

Статистика min/max в манифестах позволяет Iceberg пропускать целые файлы, которые не могут попасть под фильтр — быстрые запросы без сканирования всего.

6. Why a data engineer cares6. Почему это важно дата-инженеру

  • Reliable updates & deletes. Real MERGE/upsert and row-level deletes on a data lake (e.g. for GDPR or fixing bad rows).
  • Safe reprocessing. Time travel + snapshots let you debug "what did the table look like then?" and roll back a bad load.
  • Cheap schema changes. Add a column without rewriting the whole table.
  • Fewer small-file headaches. Iceberg supports compaction to merge tiny files into big ones for speed.
  • No vendor lock-in. Open format, many engines — pick the best tool per job.
  • Надёжные обновления и удаления. Настоящий MERGE/upsert и удаление по строкам в озере данных (например для GDPR или фикса плохих строк).
  • Безопасная переобработка. Time travel + снапшоты позволяют отладить «как таблица выглядела тогда?» и откатить плохую загрузку.
  • Дешёвые изменения схемы. Добавить колонку без перезаписи всей таблицы.
  • Меньше боли с мелкими файлами. Iceberg поддерживает компакцию — слияние крошечных файлов в крупные ради скорости.
  • Нет привязки к вендору. Открытый формат, много движков — выбираешь лучший инструмент под задачу.
Iceberg vs Delta vs HudiIceberg vs Delta vs Hudi All three are table formats solving the same problem (ACID + versioning over lake files). Delta Lake comes from Databricks, Hudi from the Uber world, Iceberg is fully open and the most engine-neutral. For interviews: know they're alternatives and that Iceberg's selling points are openness and clean hidden partitioning + schema evolution. Все трое — табличные форматы, решающие одну задачу (ACID + версионирование поверх файлов озера). Delta Lake — из Databricks, Hudi — из мира Uber, Iceberg — полностью открытый и самый нейтральный к движкам. Для интервью: знай, что это альтернативы, а сильные стороны Iceberg — открытость и аккуратные скрытое партиционирование + эволюция схемы.

7. Mini-glossary7. Мини-словарь

WordPlain meaning
Table formatMetadata that makes many files act as one table (Iceberg).
File formatHow one file stores data (Parquet, ORC).
SnapshotA version of the table at a point in time.
Time travelQuerying the table as of an older snapshot.
Schema evolutionSafely changing columns over time (tracked by id).
Hidden partitioningIceberg applies partitioning automatically from your filters.
ManifestA metadata file listing data files + their stats.
CompactionMerging many small files into fewer big ones.
СловоПростой смысл
Табличный форматМетаданные, делающие много файлов одной таблицей (Iceberg).
Формат файлаКак один файл хранит данные (Parquet, ORC).
СнапшотВерсия таблицы на момент времени.
Time travelЗапрос таблицы на момент старого снапшота.
Эволюция схемыБезопасное изменение колонок со временем (по id).
Скрытое партиционированиеIceberg применяет партиционирование автоматически из твоих фильтров.
МанифестФайл метаданных со списком файлов данных и их статистикой.
КомпакцияСлияние многих мелких файлов в меньшее число крупных.

8. Quick self-check8. Быстрая самопроверка

Answer in your head, then tap to flip.Ответь про себя, потом нажми, чтобы перевернуть.

Iceberg vs Parquet — what's the difference?Iceberg vs Parquet — в чём разница?
tapнажми
Parquet is a file format (how one file stores data). Iceberg is a table format (metadata making many Parquet files one reliable table). They work together.Parquet — формат файла (как один файл хранит данные). Iceberg — табличный формат (метаданные, делающие много Parquet-файлов одной надёжной таблицей). Работают вместе.
What is time travel and why is it useful?Что такое time travel и чем полезен?
tapнажми
Querying the table as of a past snapshot. Useful for debugging ("what did it look like then?"), reproducibility, and rolling back a bad load.Запрос таблицы на момент прошлого снапшота. Полезно для отладки («как было тогда?»), воспроизводимости и отката плохой загрузки.
Why are Iceberg schema changes safe?Почему изменения схемы в Iceberg безопасны?
tapнажми
Columns are tracked by a hidden id, not by name or position. So renaming/reordering/adding/dropping doesn't break reads of old data.Колонки отслеживаются по скрытому id, а не по имени или позиции. Поэтому переименование/перестановка/добавление/удаление не ломают чтение старых данных.
What does "atomic commit" give readers?Что даёт читателям «атомарный коммит»?
tapнажми
They always see a complete, consistent snapshot — never half-written data. A commit swaps the "current" pointer all-or-nothing; in-flight readers keep the old snapshot.Они всегда видят полный согласованный снапшот — никогда полузаписанные данные. Коммит переключает указатель «текущий» по принципу всё-или-ничего; уже работающие читатели остаются на старом снапшоте.
What is hidden partitioning?Что такое скрытое партиционирование?
tapнажми
Iceberg remembers the partition scheme and applies it from your normal filter (e.g. on a timestamp). No manual partition column in every query, and you can't forget it → fewer mistakes, faster scans.Iceberg помнит схему партиционирования и применяет её из обычного фильтра (например по времени). Не нужно вручную указывать партиционную колонку в каждом запросе, и нельзя про неё забыть → меньше ошибок, быстрее сканы.
Iceberg vs Delta vs Hudi?Iceberg vs Delta vs Hudi?
tapнажми
All are table formats (ACID + versioning over lake files). Delta = Databricks, Hudi = Uber-origin, Iceberg = fully open and most engine-neutral. Same problem, different ecosystems.Все — табличные форматы (ACID + версионирование поверх файлов озера). Delta = Databricks, Hudi = из Uber, Iceberg = полностью открытый и самый нейтральный к движкам. Одна задача, разные экосистемы.