Learning Platform
Глоссарий Troubleshooting
Урок 09.06 · 14 мин
Средний
Format ComparisonDecision MatrixDelta LakeApache IcebergApache HudiApache PaimonMigration

Сравнение форматов: выбор технологии

Decision Matrix

В предыдущих уроках мы детально разобрали каждый формат. Теперь сведём все характеристики в одну таблицу для принятия решения:

DimensionDelta LakeApache IcebergApache HudiApache Paimon
РазработчикDatabricks (2019)Netflix (2017)Uber (2016)Alibaba/Flink (2022)
АрхитектураTransaction logCatalog + snapshotsTimeline + base filesLSM-tree
ACIDДаДаДаДа
Time travelVersion numbers + timestampsSnapshot IDs + timestampsInstant timesSnapshot IDs
Schema evolutionAdd / rename / dropПолная (add/drop/rename/reorder)Ограничена (add recommended)Add / drop
Partition evolutionТребует rewriteIn-place, без rewriteТребует rewriteIn-place
StreamingХорошая (Structured Streaming)Хорошая (Structured Streaming)Хорошая (incremental pull)Native (streaming-first)
CompactionOPTIMIZE, Z-ORDERSort + compact (rewrite_data_files)Compaction serviceAuto-compaction (LSM)
Поддержка движковSpark-centric, растётEngine-agnostic (самая широкая)Spark, Flink, PrestoFlink-centric, Spark растёт
Cloud adoptionDatabricks, Azure, AWSSnowflake, AWS, GCP, все облакаAWS EMR, ограниченAlibaba Cloud, растёт
Уникальная фичаUniForm (read as Iceberg/Hudi)Partition evolutionIncremental queries, MORChangelog streaming CDC
Best forDatabricks, Delta ecosystemMulti-engine, vendor-neutralUpsert-heavy, real-timeStreaming-first, CDC
TIP

Ключевой инсайт

Все четыре формата решают одну и ту же фундаментальную проблему: ACID-транзакции поверх объектного хранилища. Разница — в архитектурных trade-offs: Delta оптимизирован для Spark-экосистемы, Iceberg — для мультиdвижковости, Hudi — для upserts, Paimon — для streaming.

Decision Tree: выбор формата

Используйте этот decision tree для быстрого определения подходящего формата:

Какой ваш основной сценарий?

├── Streaming-first (непрерывная запись из Kafka/Flink)?
│   └── → Apache Paimon
│       Причина: LSM-tree + native changelog CDC

├── ACID + Spark-centric (Databricks/Delta ecosystem)?
│   └── → Delta Lake
│       Причина: нативная интеграция Spark 4.0, UniForm

├── Multi-engine / vendor-neutral?
│   └── → Apache Iceberg
│       Причина: самая широкая поддержка движков,
│                partition evolution без rewrite

└── Upsert-heavy (CDC, real-time обновления)?
    └── → Apache Hudi
        Причина: COW/MOR table types, incremental queries

Нюансы выбора

Выбор не всегда однозначен. Вот дополнительные факторы:

Если вы уже в Databricks:

  • Delta Lake — безусловный выбор. Нативная интеграция, UniForm для interop с другими форматами.

Если нужна мультиdвижковая среда:

  • Iceberg — Snowflake, Trino, Presto, Spark, Flink, Dremio. Самая широкая поддержка.
  • Delta + UniForm — пишете в Delta, другие движки читают через Iceberg-интерфейс.

Если Flink — основной движок:

  • Paimon — нативная интеграция с Flink, streaming-first.
  • Iceberg — хорошая Flink-поддержка, шире экосистема.

Если нужны CDC-пайплайны:

  • Paimon changelog — native CDC без дополнительной инфраструктуры.
  • Hudi incremental queries — pull-based CDC.
  • Iceberg + Spark Structured Streaming — generic streaming.
Проверка знанийKnowledge check
Какой формат выбрать для мультиdвижковой среды (Spark + Trino + Snowflake) и почему?
ОтветAnswer
Apache Iceberg -- самый vendor-neutral формат с поддержкой наибольшего количества вычислительных движков: Spark, Flink, Trino, Presto, Snowflake, Dremio, AWS Athena. Альтернатива -- Delta Lake с UniForm, который автоматически генерирует Iceberg-совместимые metadata, но это добавляет зависимость от Delta. Iceberg также предлагает partition evolution без rewrite данных, что важно для эволюционирующих схем партиционирования.

Миграция между форматами

Delta -> Iceberg

Delta Lake с UniForm делает этот переход прозрачным:

# Включаем UniForm на существующей Delta-таблице
spark.sql("""
    ALTER TABLE delta.`/data/events`
    SET TBLPROPERTIES (
        'delta.universalFormat.enabledFormats' = 'iceberg'
    )
""")
# Теперь Iceberg-движки могут читать эту таблицу

Iceberg -> Delta

Нет автоматической миграции. Варианты:

  1. CTAS (Create Table As Select) — перезапись всех данных:
iceberg_df = spark.read.format("iceberg").load("iceberg_catalog.db.events")
iceberg_df.write.format("delta").save("/data/events_delta")
  1. Incremental migration — streaming-чтение Iceberg + streaming-запись Delta.

Hudi -> Delta/Iceberg

Аналогично — через CTAS. Hudi не имеет аналога UniForm.

Любой формат -> Paimon

Paimon поддерживает migrate action для Hive-таблиц:

spark.sql("""
    CALL sys.migrate_table(
        source_type => 'hive',
        table => 'hive_db.events',
        options => 'changelog-producer=input'
    )
""")
NOTE

UniForm как мост

UniForm в Delta Lake 4.0 — самый практичный подход к мультиформатности: вы пишете в Delta (нативная Spark-интеграция), а другие движки читают через Iceberg/Hudi-интерфейс. Это проще, чем поддерживать две отдельные таблицы.

Adoption и тренды

ФорматЗрелостьТемп ростаГлавный драйвер
Delta LakeВысокаяСтабильныйDatabricks + Spark 4.0 native
Apache IcebergВысокаяСамый быстрыйSnowflake + multi-cloud
Apache HudiСредняяУмеренныйAWS EMR + Uber origin
Apache PaimonРанняяБыстрыйFlink ecosystem + Alibaba

Тренд 2024-2026: конвергенция форматов. UniForm (Delta), Iceberg V3, Hudi 1.x — все движутся к большей interoperability. Возможно, через 2-3 года границы между форматами станут менее значимыми.

Проверка знанийKnowledge check
Как UniForm в Delta Lake решает проблему vendor lock-in?
ОтветAnswer
UniForm (Universal Format) автоматически генерирует metadata в формате Iceberg и Hudi при каждой записи в Delta-таблицу. Данные физически хранятся в Delta (Parquet файлы + transaction log), но другие вычислительные движки (Trino, Presto, Snowflake) могут читать их через Iceberg-интерфейс. Это позволяет использовать нативную Spark/Delta интеграцию для записи и любой движок для чтения -- без дублирования данных.
TIP

Для углублённого сравнения всех форматов хранения и выбора под конкретную нагрузку см. курс Storage Formats Deep-Dive — decision framework с матрицей сравнения.

Что дальше?

В следующем уроке мы познакомимся со Spark Declarative Pipelines (SDP) — новой системой декларативного ETL в Spark 4.1, которая объединяет lakehouse-форматы с автоматическим управлением пайплайнами.

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

Результат: 0 из 0
Прикладной
Вопрос 1 из 6. Компания использует Spark для ETL и Trino для ad-hoc аналитики. Какой lakehouse-формат наиболее подходит?

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

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

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

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