delta lake

Delta Lake — это open-source storage framework, добавляющий надёжность уровня data warehouse поверх data lake путём внедрения ACID-транзакций, версионирования данных и schema enforcement для файлов в объектном хранилище. Delta Lake был разработан командой Databricks и открыт в 2019 году, став фундаментом архитектуры data lakehouse.

Как Delta Lake работает

Delta Lake хранит данные в формате Parquet в объектном хранилище (S3, ADLS, GCS), добавляя папку _delta_log с транзакционным журналом (Delta Log). Каждая операция записывается как JSON-файл с указанием добавленных/удалённых файлов данных. При чтении Delta Lake восстанавливает актуальное состояние таблицы по журналу транзакций.

Это обеспечивает ACID-семантику: writer атомарно коммитит все изменения через новую запись в Delta Log. Читатели видят консистентное состояние на момент начала своего запроса (snapshot isolation).

Ключевые возможности Delta Lake

ACID-транзакции: атомарные операции записи — либо полностью выполняются, либо нет. Параллельные запросы на чтение не блокируют запись и наоборот.

Time Travel: каждая версия таблицы сохраняется в Delta Log. Можно запрашивать исторические состояния:

df = spark.read.format("delta").option("versionAsOf", 42).load("/path/to/table")

Или через SQL: SELECT * FROM table VERSION AS OF 42. Полезно для аудита, восстановления данных и воспроизводимости ML-экспериментов.

Schema Enforcement: Delta Lake по умолчанию отклоняет данные с несоответствующей схемой, предотвращая «загрязнение» таблицы некорректными данными — проблема, типичная для «сырых» data lake.

Schema Evolution: контролируемое расширение схемы через mergeSchema option — добавление новых колонок без переписывания существующих данных.

Upserts через MERGE: SQL MERGE (UPSERT) операция для идемпотентного обновления данных. Критично для CDC-пайплайнов и инкрементальной загрузки.

OPTIMIZE и Z-Order

Delta Lake накапливает много мелких файлов при частых инкрементальных записях — это снижает производительность чтения. Команда OPTIMIZE сжимает мелкие файлы в крупные (bin-packing). Z-Order кластеризует связанные данные в одних файлах по нескольким колонкам, ускоряя фильтрацию. Databricks Runtime добавляет автоматическую оптимизацию через Auto Optimize и Liquid Clustering (Databricks 13+).

Delta Sharing

Delta Sharing — открытый протокол для безопасного обмена данными между организациями без копирования. Получатель читает данные напрямую через REST API без необходимости иметь доступ к объектному хранилищу источника. Поддерживается pandas, Spark, Power BI, Tableau.

Delta Live Tables (DLT)

Delta Live Tables — декларативный фреймворк от Databricks для построения надёжных batch и streaming пайплайнов поверх Delta Lake. DLT автоматически управляет зависимостями между таблицами, обработкой ошибок, мониторингом и retry-логикой. Таблицы описываются декларативно через @dlt.table декоратор в Python или SQL.

Delta Lake в открытой экосистеме

Помимо Spark, Delta Lake поддерживается через delta-rs (Rust-реализация с Python биндингами), Delta Kernel (Java/Rust), коннекторы для Flink, Trino, Presto. Это позволяет читать Delta-таблицы без Spark — через pandas, DuckDB, Polars или нативные SQL-движки.

Delta Lake и Apache Iceberg: конвергенция

Долгое время Delta Lake и Apache Iceberg были конкурирующими форматами с частичной несовместимостью. Конвергенция происходит через несколько механизмов. UniForm (Delta Lake 3.0) позволяет читать Delta-таблицы как Iceberg или Hudi без конвертации данных — единое хранилище, несколько интерфейсов. Databricks объявила о нативной поддержке Iceberg REST Catalog в Unity Catalog. Apache Polaris (open-source Iceberg REST Catalog от Snowflake) поддерживает подключение к Delta Lake через UniForm. Это движение к открытым стандартам снижает vendor lock-in и позволяет выбирать compute-движок (Spark, Flink, Trino, Snowflake) независимо от формата хранения. Для новых проектов выбор между Delta Lake и Iceberg всё меньше критичен — важнее ecosystem совместимость.

Частые вопросы

  • Можно ли использовать Delta Lake без Databricks?

    Да. Delta Lake — открытый формат. delta-rs (Rust-реализация) позволяет читать и писать Delta-таблицы из pandas, DuckDB, Polars без Spark. Apache Spark с open-source delta-spark пакетом работает вне Databricks. Некоторые возможности (Auto Optimize, Liquid Clustering) доступны только в Databricks Runtime.

  • Как работает параллельная запись в Delta Lake?

    Delta Lake использует optimistic concurrency control. При конфликте двух параллельных writers одна транзакция завершается успешно, другая получает конфликт и должна повторить операцию. Читатели при этом не блокируются — они видят последовательную версию через snapshot isolation.

  • Что такое checkpoint в Delta Log?

    Каждые 10 коммитов Delta Lake создаёт Parquet-checkpoint — снимок актуального состояния таблицы. Это ускоряет восстановление состояния: вместо чтения всех JSON-записей с начала достаточно прочитать последний checkpoint и delta-файлы после него.

Не хватает деталей?

Напишите, что уточнить по теме «delta lake» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).

Поделиться