Learning Platform
Глоссарий Troubleshooting
Урок 15.03 · 22 мин
Начальный
IcebergDelta LakeHudiOpen Table Formats

Iceberg, Delta Lake, Hudi: open table formats

В прошлом уроке мы поняли концепт lakehouse: ACID и schema поверх object storage. Теперь разберём три конкретных open table formats, которые реализуют этот концепт:

  • Apache Iceberg — новый де-факто стандарт, 78%+ новых деплоев в 2026.
  • Delta Lake — детище Databricks, особенно популярен у их клиентов.
  • Apache Hudi — изначально от Uber, фокус на upsert-нагрузках.

Понять различия — важная часть собеседования на DE. Эти форматы выглядят похоже, но имеют тонкие отличия в архитектуре и use cases.


Зачем нужен open table format

Сырой Parquet — это просто файл. Если у тебя в s3://lake/orders/ лежит 1000 Parquet-файлов, это не таблица, это набор файлов. Чтобы превратить их в таблицу с ACID, нужно:

  1. Знать, какие файлы относятся к таблице (manifest).
  2. Знать схему (типы колонок, имена).
  3. Знать партиционирование (как файлы разбиты).
  4. Уметь атомарно обновлять список файлов (transaction log).
  5. Хранить версии (для time travel).

Open table format — это спецификация, описывающая, как организовать метаданные для всего этого. Каждый формат — Iceberg, Delta, Hudi — даёт свою реализацию.

Parquet: row groups, column chunks и footer-метаданные — физическая основа open table formats
Что такое open table format
Open Table Format Specification

Apache Iceberg

История: создан в Netflix в 2017. Передан в Apache Foundation в 2019. В 2026 — де-факто стандарт.

Ключевые особенности:

  • Hidden partitioning. Аналитик не должен знать схему партиций, чтобы писать запросы.
  • Schema evolution. Можно добавлять/удалять/переименовывать колонки, менять типы (совместимо).
  • Partition evolution. Можно изменить схему партицирования таблицы — это уникально для Iceberg.
  • Snapshot isolation. ACID через snapshot’ы (immutable метаданные).
  • Engine-agnostic. Spark, Trino, Flink, Hive, Snowflake, Athena — все умеют.

Структура файлов:

my-table/
  data/
    00001-Parquet-files...
  metadata/
    v1.metadata.json
    v2.metadata.json
    snap-12345.avro      <- snapshot
    manifest-67890.avro  <- manifest list

При записи Iceberg создаёт новые data-файлы и обновляет metadata.json с новым snapshot-указателем — атомарная операция.

Caталоги (catalogs):

Iceberg-таблицам нужен catalog — место, которое отслеживает текущий snapshot таблицы. Варианты:

  • AWS Glue — managed catalog от Amazon.
  • Hive Metastore — классический, переиспользуется.
  • Nessie — Git-like catalog с branching.
  • REST Catalog — стандартизированный REST API.
  • Unity Catalog — Databricks.

Кто использует: Netflix, Apple, Adobe, Stripe, LinkedIn, Pinterest, Airbnb.


Delta Lake

История: создан в Databricks в 2017. Open-sourced в 2019 (Linux Foundation Delta Lake).

Ключевые особенности:

  • Транзакционный лог. Каждое изменение — отдельный JSON-файл в _delta_log/. Простая и понятная модель.
  • Schema enforcement. Строгая проверка схемы при записи.
  • Time travel. Через VERSION AS OF или TIMESTAMP AS OF.
  • MERGE syntax. Удобный SQL для upsert: MERGE INTO target USING source ON ... WHEN MATCHED ... WHEN NOT MATCHED ....
  • Liquid Clustering. В 2024 представлена техника динамической кластеризации без партиций.

Структура файлов:

my-table/
  part-00001-uuid.parquet
  part-00002-uuid.parquet
  _delta_log/
    00000000000000000000.json    <- первая операция
    00000000000000000001.json    <- следующая
    00000000000000000010.checkpoint.parquet

Каждая операция (commit) — JSON-файл со списком добавленных и удалённых файлов. Каждые 10 коммитов делается checkpoint (бинарный snapshot) для ускорения чтения метаданных.

Кто использует: все Databricks-клиенты (а это десятки тысяч компаний), Comcast, Adidas, многие финтехи.

Spark DataFrame API: как Spark читает и пишет Delta Lake и Iceberg

Apache Hudi

История: создан в Uber в 2016. Самый старый из трёх. Передан в Apache Foundation.

Ключевые особенности:

  • Заточен под upsert. Уникальная фишка Hudi — две стратегии:
    • Copy-on-Write (CoW): при upsert файл переписывается. Чтение быстрое, запись медленнее.
    • Merge-on-Read (MoR): изменения пишутся в delta-логи, мерджатся при чтении. Запись быстрая, чтение медленнее.
  • Стриминговые upsert’ы. Hudi хорошо подходит для CDC-нагрузок.
  • Time travel и schema evolution — есть, но менее зрелые, чем у Iceberg/Delta.
  • Индексы. Hudi поддерживает bloom-фильтры на ключах для быстрого upsert.

Кто использует: Uber, Walmart, Disney, Robinhood. Меньшая популярность, чем Iceberg/Delta.

Сравнение форматов: упрощённо
Iceberg
Delta Lake
Hudi

Победитель: почему Iceberg

К 2026 году рынок явно склоняется к Apache Iceberg. Причины:

1. Vendor-neutrality. Iceberg не контролируется одной компанией. Netflix, Apple, Adobe, AWS, Snowflake, Databricks, Microsoft, Google — все в Apache-комьюнити.

2. Стандарт в крупных компаниях. Когда Apple и Netflix используют Iceberg, остальные подтягиваются.

3. Snowflake поддержка. Snowflake — гигант DWH-рынка — выбрал Iceberg как стандарт для external tables (2023). Это огромный сигнал.

4. Hidden partitioning. UX для аналитиков лучше, чем у Delta/Hudi.

5. Apache governance. Открытое управление, не зависит от одной компании.

В 2026 году исследования (например, dbt State of Data Engineering) показывают: 78% новых lakehouse-деплоев — на Iceberg. Delta всё ещё силён в Databricks-экосистеме, Hudi занимает узкую нишу upsert-нагрузок.

Iceberg: catalog-архитектура, metadata layer и hidden partitioning — детальный разбор Delta Lake: transaction log, checkpoints и VACUUM — как устроен _delta_log/
TIP

Если ты junior DE в 2026 и выбираешь, что изучать первым — учи Iceberg. Это та технология, которая будет везде. Delta стоит знать как fallback, если устроишься в Databricks-shop.


Iceberg в действии: пример SQL

С Trino или Spark можно работать с Iceberg как с обычной SQL-таблицей:

-- Создание Iceberg-таблицы
CREATE TABLE catalog.db.orders (
  order_id BIGINT,
  customer_id BIGINT,
  amount DECIMAL(10,2),
  created_at TIMESTAMP
)
USING iceberg
PARTITIONED BY (days(created_at));

-- Insert
INSERT INTO catalog.db.orders VALUES (1, 100, 99.99, current_timestamp());

-- Update
UPDATE catalog.db.orders SET amount = 89.99 WHERE order_id = 1;

-- Delete
DELETE FROM catalog.db.orders WHERE customer_id = 100;

-- Time travel
SELECT * FROM catalog.db.orders FOR TIMESTAMP AS OF '2026-05-15 10:00:00';

-- Schema evolution
ALTER TABLE catalog.db.orders ADD COLUMN currency STRING;
ALTER TABLE catalog.db.orders RENAME COLUMN amount TO total_amount;

-- Partition evolution (уникальное для Iceberg)
ALTER TABLE catalog.db.orders REPLACE PARTITION FIELD days(created_at)
  WITH hours(created_at);

Совместимость с движками

Какой формат каким движком читается:

Engine support matrix

Когда что выбирать

NOTE

Cheat sheet выбора:

  • Iceberg — для новых проектов, мульти-движковых сценариев, vendor-neutrality.
  • Delta Lake — если работаешь в Databricks или твоя команда уже его использует.
  • Hudi — для CDC-нагрузок и стриминговых upsert’ов (но Iceberg догоняет).
  • Старт обучения: Iceberg + Spark/Trino. Это даст 80% всех use cases.

Будущее: единый формат?

В 2024-2025 годах появилось понимание, что три формата — это слишком. Несколько инициатив:

  • Apache XTable (бывший OneTable) — переводит метаданные между Iceberg/Delta/Hudi. Один файловый формат — три “виды” таблицы.
  • Databricks UniForm — Delta + Iceberg в одной таблице (Databricks делает Iceberg-совместимые метаданные).
  • Snowflake Iceberg Tables — Snowflake пишет в Iceberg-формате, можно читать снаружи.

К 2027-2028 году, возможно, форматы сольются на уровне совместимости. Но Iceberg уже сейчас явный лидер.


Попробуй сам

Установи PyIceberg через pip install pyiceberg. Поставь локально MinIO в Docker. Создай первую Iceberg-таблицу, сделай несколько INSERT, попробуй UPDATE, DELETE, time travel. Поэкспериментируй с partitioning через days(created_at) и hours(created_at). Альтернатива: бесплатный Databricks Community Edition для Delta Lake — там есть готовый Spark и notebook. Прочувствуй разницу: Iceberg в Trino vs Delta в Spark. Это лучшая практика для понимания форматов.

Проверка знанийKnowledge check
Почему Apache Iceberg стал де-факто стандартом open table format к 2026 году, оттеснив Delta Lake и Hudi?
ОтветAnswer
Три главные причины. Первая — vendor-neutrality: Iceberg не контролируется одной компанией, в Apache-комьюнити участвуют Netflix, Apple, Adobe, Snowflake, AWS, Microsoft, Google. Delta изначально создан Databricks (хотя open-source), Hudi — Uber-driven. Вторая — поддержка крупными вендорами: Snowflake выбрал Iceberg как стандарт для external tables в 2023, что был огромный сигнал рынку; BigQuery, Athena, Trino, Spark — все имеют первоклассную поддержку. Третья — техническая зрелость: hidden partitioning делает UX лучше, чем у Delta; partition evolution позволяет менять схему партицирования без переписывания данных (уникальная фича). К 2026 году исследования показывают 78%+ новых деплоев на Iceberg. Delta остаётся силён в Databricks-экосистеме, Hudi занимает узкую нишу CDC/upsert-нагрузок. Если выбираешь, что изучать первым — Iceberg.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 6. Какой open table format стал де-факто стандартом для новых деплоев в 2026 году?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3