DuckDB: расширение DuckLake читает и пишет открытый формат Lakehouse на SQL и Parquet

DuckDB: расширение DuckLake читает и пишет открытый формат Lakehouse на SQL и Parquet

Источник, README репозитория duckdb/ducklake на GitHub. В нём сказано, что DuckLake, это открытый формат Lakehouse (хранилище данных, сочетающее свойства озера данных и хранилища таблиц), построенный на SQL и Parquet. Метаданные DuckLake хранит в базе-каталоге, а сами данные, в файлах Parquet. Расширение DuckLake позволяет DuckDB напрямую читать и записывать данные из DuckLake.

Установка делается командой INSTALL ducklake;. Последнюю версию для разработки можно поставить из core_nightly командой FORCE INSTALL ducklake FROM core_nightly;. Базы DuckLake подключаются синтаксисом ATTACH, после чего таблицы создаются, изменяются и запрашиваются обычным SQL.

В README приведён короткий пример. Метаданные хранятся в файле базы DuckDB metadata.ducklake, данные, в файлах Parquet в каталоге file_path: ATTACH 'ducklake:metadata.ducklake' AS my_ducklake (DATA_PATH 'file_path/'). Затем создаётся таблица my_table с колонками id (INTEGER) и val (VARCHAR), в неё вставляются строки (1, 'Hello') и (2, 'World'). После UPDATE значение val для id=2 меняется на 'DuckLake'. Запрос с AT (VERSION => 2) возвращает таблицу в состоянии до обновления, с 'World'. Это путешествие по версиям (time travel). Команда ALTER TABLE ... ADD COLUMN добавляет колонку new_column, у существующих строк в ней NULL. Функция table_changes('my_table', 2, 2) показывает изменения между снапшотами: для снапшота 2 это две вставки (insert) строк Hello и World.

Сборка: git submodule init, git submodule update --recursive и make (для сборки на нескольких ядрах, make GEN=ninja release). Подмодули привязаны к версии DuckDB из файла .github/duckdb-version, против неё собирается CI; команда make pull переводит их на актуальный конец ветки, где сборка может сломаться. Запуск, во встроенной оболочке ./build/release/duckdb.

Авторы приглашают внешних участников; активная ветка разработки, main, и все вклады должны идти в неё. Набор тестов запускается через ./build/release/test/unittest, есть отдельные конфигурации: тесты DuckDB с DuckLake в роли хранилища, тесты с PostgreSQL как базой-каталогом (нужен запущенный PostgreSQL), с SQLite как базой-каталогом и с включёнными векторами удаления (deletion vectors).

Ключевые факты

  • DuckLake, открытый формат Lakehouse на SQL и Parquet: метаданные в базе-каталоге, данные в файлах Parquet.
  • Расширение DuckLake для DuckDB позволяет напрямую читать и записывать данные; ставится командой INSTALL ducklake;, свежая версия, из core_nightly.
  • Базы подключаются через ATTACH, таблицами управляют обычным SQL; в примере из README есть путешествие по версиям (AT (VERSION => 2)) и просмотр изменений через table_changes.
  • В тестовых конфигурациях в роли каталога используются PostgreSQL и SQLite, а также режим с векторами удаления.
  • Подмодули при сборке привязаны к версии DuckDB из .github/duckdb-version; вклады принимаются в ветку main.

Почему это важно

Это не новость про нейросети, а инфраструктурный материал для тех, кто работает с аналитическими данными. Формат DuckLake хранит данные в обычных файлах Parquet, а метаданные, в базе-каталоге, и DuckDB умеет напрямую читать и писать такие данные. Из README видно, что поверх этого доступны привычный SQL, возврат к прежним версиям таблицы и просмотр изменений между снапшотами.

Кому это важно

Инженерам данных и аналитикам, которые уже используют DuckDB или Parquet и присматриваются к формату Lakehouse. Также тем, кто хочет внести вклад в расширение: README прямо приглашает внешних участников.

Как это применить

Установить расширение командой INSTALL ducklake; (или FORCE INSTALL ducklake FROM core_nightly; для свежей версии для разработки), подключить базу через ATTACH 'ducklake:metadata.ducklake' AS my_ducklake (DATA_PATH 'file_path/'), затем работать обычным SQL. Для сборки из исходников: git submodule init, git submodule update --recursive, make. Сведений о цене или лицензии в тексте README нет.

Можно ли доверять

Источник, первичный: README самого репозитория duckdb/ducklake, всё в пересказе взято оттуда. При этом текст не содержит ни замеров производительности, ни сравнения с другими форматами Lakehouse, ни заявлений о том, что расширение готово к промышленному использованию.

Риски и подводные камни

README не говорит о стабильности расширения и не называет дату или номер версии. Версия для разработки из core_nightly, именно версия для разработки. При самостоятельной сборке команда make pull переводит подмодули на конец их ветки, где сборка может не пройти; для воспроизводимости подмодули привязаны к версии DuckDB из .github/duckdb-version. PostgreSQL и SQLite упомянуты только как конфигурации тестов, а полный список поддерживаемых баз-каталогов в README не приведён.