LakeFS

Тимур Салимов — Techlead DS

Введение

LakeFS объединяет лучшие практики разработки программного обеспечения и применяет их к работе с данными.

LakeFS обеспечивает контроль версий над озером данных и использует семантику, подобную git, для фиксации версий данных и доступа к ним. Если вы знаете git, с LakeFS вы будете чувствовать себя привычно.

С помощью LakeFS вы можете использовать в своем озере данных такие концепции, как:

  • branch – для создания изолированной версии данных;
  • commit – для создания воспроизводимого снимка данных;
  • merge – чтобы объединять ваши изменения в одно атомарное состояние.

Как может быть реализовано версионирование данных?

Подход к управлению версиями №1: полное дублирование

У вас есть набор данных, и вы хотите увидеть, как он меняется с течением времени? Один из вариантов — сохранять полную копию всех данных при каждом изменении одного файла. Лучше всего это работает для небольших наборов данных.

Подход к управлению версиями № 2: метаданные «valid_from/to»

Более экономичный и инкрементный подход к управлению версиями заключается в добавлении и поддержании двух полей метаданных в табличном наборе данных, часто называемых valid_from и valid_to.

При обновлении записи в этом наборе данных мы никогда не перезаписываем существующую запись. Вместо этого мы добавляем новые записи и обновляем поле valid_to до текущей отметки времени для любой записи, которая была бы перезаписана.

Помимо того, что вы можете реализовать это в своих собственных ETL пайплайнах, это также, в частности, подход, который использует SQL Server для временных таблиц и то, что использует dbt для создания снимков.

Подход к управлению версиями №3: Контроль версий данных как объект первого класса

Если первые два подхода можно резюмировать так: «Давайте добавим немного контроля версий к уже имеющимся у меня данным», то теперь пришло время совершенно иного подхода.

А что если относиться к управлению версиями данных как к объекту первого класса? Как к базовому и неотъемлемому свойству любых данных?

Чтобы сделать это возможным – как видно из ограничений вышеупомянутых подходов – необходимо, чтобы инструмент:

  • Минимизировал объем хранилища при управлении версиями данных. Это означает, что не следует создавать копии объектов данных, которые остаются неизменными между версиями.
  • Предоставлял базовый набор операций, которые позволяют напрямую взаимодействовать с версиями. Такие как: «создать версию», «удалить версию», «сравнить две версии» и т.д.
  • Одинаково работал с любым масштабом данных, форматом данных, а также как со структурированными, так и с неструктурированными данными.

Версионирование данных в LakeFS

LakeFS решает эти задачи становясь некоторым уровнем абстракции над физическим объектным хранилищем данных.