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 необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).