Архитектура Apache Iceberg: как устроена таблица поверх S3 (Ч. 2)

Другое 11.04.2026 · 👁 823 просмотров
👍 👍 👍 👍 Архитектура Apache Iceberg: как устроена таблица поверх S3 (Ч. 2) В прошлом посте обсуждали связку Trino + Iceberg. Теперь разберёмся, за счёт чего Iceberg вообще превращает “папку с файлами в S3” в полноценную аналитическую таблицу. ⚙️ Как устроен Iceberg Если упрощать, у Iceberg несколько уровней: 1 Catalog 2 Metadata layer 3 Snapshot 4 Manifest list/manifest files 5 Data/Delete files Вся магия Iceberg в слое метаданных, который управляет тем, какие файлы относятся к таблице, в каком состоянии она находится сейчас и какую версию данных должен читать движок. Ниже разберем каждую сущность отдельно: 1 Catalog Это слой, который отвечает за учёт таблиц и их текущего состояния. Он хранит: ➖ список таблиц ➖ путь к актуальному metadata file каждой таблицы То есть каталог — это не хранилище данных, а реестр актуальных версий таблиц. Каталог может быть разным, Iceberg не привязан к одному хранилищу метаданных — можно выбрать, где хранить этот “реестр”: Hive Metastore (вариант из Hadoop-мира), JDBC Catalog (таблицы в обычной БД), Project Nessie (каталог с git-подобными ветками) или другие форматы. В них меняется реализация, но логика остается той же. 2 Metadata layer Это основной уровень управления таблицей. Главный metadata file хранит: ➖ схему таблицы ➖ список snapshot’ов ➖ ссылки на manifest list Каждое изменение таблицы создаёт новый metadata file (далее подробнее о нем). За счёт этого Iceberg поддерживает версионирование, роллбэк, тайм тревел и безопасное изменение схемы 3 Snapshot’ы Это конкретная зафиксированная версия таблицы в момент времени. Iceberg не “переписывает таблицу целиком” при каждом изменении. Он создаёт новый snapshot, который ссылается на актуальный набор файлов через manifest list. То есть: таблица = не просто набор файлов, а грубо говоря цепочка snapshot’ов, у каждого из которых своё состояние данных 4 Manifest list и manifest files Вот здесь начинается самое важное для производительности. Manifest list — это список manifest-файлов, относящихся к конкретному snapshot’у. А сами manifest files уже содержат информацию о data files и delete files: какие файлы входят в таблицу, какие у них партиции и статистики (min/max, null count и т.д.). За счёт этого движок ещё на этапе planning понимает, какие файлы можно вообще не читать. Именно так работают file/metadata pruning и data skipping. 5 Data files Это уже сами файлы с данными в object storage: Parquet, ORC, Avro. Чаще всего в аналитике используют Parquet. Важно, что сами data files не знают, что они часть таблицы — они просто хранят данные. Вся логика таблицы находится на уровне метаданных. 5 Delete files Iceberg поддерживает не только append, но и DELETE / UPDATE / MERGE. Для этого используются delete files: position deletes — удаление строк по позиции в файле, equality deletes — удаление по значению ключа. При чтении движок учитывает и data files, и delete files, чтобы собрать актуальное состояние таблицы. Как происходит commit Iceberg не переписывает таблицу целиком. При изменении он создаёт новые data/delete files, новые manifest’ы, собирает новый snapshot, формирует новый metadata file и обновляет указатель в catalog. По сути commit — это переключение таблицы на новую версию. За счёт этого Iceberg даёт atomic commit, snapshot isolation и optimistic concurrency control. Как выполняется запрос Если совсем упростить: catalog → metadata file → snapshot → manifest list → manifest files → нужные data files. То есть движок не читает все файлы в S3 подряд, а заранее отсекает лишние. Поэтому Iceberg — это не просто папка с parquet-файлами, а полноценный табличный формат поверх object storage. Резюмируя, Iceberg — это слой метаданных и snapshot-логики, который превращает S3 в управляемую аналитическую таблицу. ❤️‍🔥 Подписывайтесь и поддержите канал бустом ↗️ Менторю и помогаю выйти на оффер ❓ Был ли у вас на проекте Iceberg или пока не доходили до него? @data_driven_bogdan
Откликнуться в Telegram →

⚠️ Никогда не платите «за оформление» или «гарантию трудоустройства» — это признак мошенников. Работа ТРУ не несёт ответственности за содержание вакансии.

🇮🇱 Не нашли подходящую зарплату? В Израиле платят от $3000 Без языка и опыта · жильё и легализация под ключ · официально Смотреть вакансии →