System Design Space

    Глава 98

    Обновлено: 15 февраля 2026 г. в 08:11

    Apache Iceberg: архитектура таблиц в data lake

    Прогресс части0/21

    Практический разбор Apache Iceberg: snapshots, manifests, ACID в data lake, schema evolution, hidden partitioning, time travel и место Tableflow в streaming-контуре.

    Связь

    Data Pipeline / ETL / ELT Architecture

    Базовый контекст: ingestion, orchestration, data quality и recovery-процессы.

    Открыть главу

    Apache Iceberg - это открытый формат аналитических таблиц, который привносит в data lake управляемость уровня DWH: атомарные коммиты, эволюцию схемы, time travel и предсказуемое чтение больших таблиц. Практически это фундамент для lakehouse-подхода, когда streaming и batch контуры работают поверх единого табличного представления данных.

    Эволюция подходов к данным

    Data Warehouse (1990s)

    Nightly ETL, строгая схема и отчеты с лагом до следующего дня.

    Высокий контроль качества, но низкая гибкость и дорогие изменения.

    Data Lake (2010s)

    Schema-on-read, ELT и масштаб на object storage (S3/GCS/Blob).

    Гибкость выше, но сложно с транзакционностью и консистентностью.

    Lakehouse / Open Table Format

    Iceberg добавляет ACID, эволюцию схемы и time travel поверх data lake.

    Появляется больше метаданных и operational дисциплины, но резко растет управляемость.

    Боли классического data lake

    • Медленные list-операции и непредсказуемый query planning при большом числе файлов.
    • Отсутствие ACID при параллельных записях и race conditions при overwrite.
    • Сложная schema evolution: rename/drop колонок часто ломает совместимость.
    • Ручная поддержка partitioning и боль с reprocessing/backfill.

    Архитектурные слои Iceberg

    Показывает как движок читает только релевантные файлы через metadata pruning.

    Интерактивный запуск

    Нажмите "Старт", чтобы пройти путь по слоям и увидеть порядок действий.

    1. Lookup в catalog

      Engine получает ссылку на текущий metadata file таблицы.

    2. Чтение metadata file

      Загружается схема, partition spec и список доступных snapshots.

    3. Выбор snapshot

      Выбирается консистентный snapshot для запроса и time travel.

    4. Загрузка manifest list

      Определяется набор manifest files, относящихся к snapshot.

    5. Predicate pruning

      По min/max/null stats отбираются только релевантные data files.

    6. Сканирование data files

      Движок читает только выбранные файлы и возвращает результат запроса.

    Показывает оба пути: query path вниз и commit path вверх.

    readwrite
    readwrite
    readwrite
    readwrite
    readwrite

    Выбранный слой

    Snapshot

    Фиксирует консистентную версию таблицы для чтения и time travel.

    Содержит: Snapshot ID, commit timestamp, ссылку на manifest list.

    Зачем нужен: Позволяет reproducible queries, rollback и аудит изменений.

    Compliance

    Data Governance & Compliance

    Row-level deletes и lineage особенно важны для нормативных требований.

    Открыть главу

    Что именно решает Iceberg

    ACID транзакции

    Copy-on-write + optimistic concurrency на уровне metadata commit.

    Безопасные параллельные INSERT/DELETE/MERGE без corruption таблицы.

    Time Travel

    Чтение по snapshot ID или timestamp.

    Воспроизводимые запросы, аудит изменений и rollback сценарии.

    Schema Evolution

    Column IDs и метаданные схемы в JSON, а не позиционные индексы.

    Добавление/переименование колонок без полной перезаписи таблицы.

    Hidden Partitioning

    Partition transforms (bucket/truncate/day) скрыты за абстракцией таблицы.

    Быстрый scan и меньше ошибок от ручного выбора partition key в запросах.

    Row-level deletes

    V2-спецификация с delete files и позиционными ссылками.

    GDPR/ФЗ-152 delete workflows, upsert и точечные исправления данных.

    Физическая модель и развёртывание

    • Iceberg - это не отдельный сервер, а открытая спецификация + библиотеки и интеграции движков.
    • Данные и метаданные хранятся как обычные файлы в object storage.
    • Catalog - внешний компонент (Hive Metastore, AWS Glue, JDBC, REST catalog).
    • Spark/Flink/Trino/Impala/Hive читают одну и ту же таблицу по единому формату метаданных.
    • Дизайн избегает критичных для object storage rename/list bottleneck-паттернов.

    Tableflow и streaming-контур

    • Kafka-топики автоматически материализуются в Iceberg-таблицы для аналитики near real-time.
    • Снижается hand-made ETL код между streaming ingestion и BI/lakehouse слоями.
    • Нужны data contracts и schema governance, иначе garbage-in быстро масштабируется.
    • Полезно как мост между operational stream-контуром и аналитическими SLA по свежести.

    Связанные главы

    References