dbt-duckdb
dbt-duckdb — это адаптер (плагин) для инструмента трансформации данных dbt (data build tool), предназначенный для работы с in-process СУБД DuckDB. Он позволяет выполнять SQL-преобразования данных, написанные в рамках dbt, непосредственно в движке DuckDB, минуя развёртывание отдельного сервера базы данных.
История и предпосылки
Проект dbt-duckdb возник как ответ на потребность в лёгком и быстром инструменте для аналитической обработки данных, не требующем сложной инфраструктуры. DuckDB, встраиваемая колоночная СУБД, оптимизирована для аналитических запросов и может работать как в памяти, так и с файлами на диске. dbt, в свою очередь, является стандартом де-факто для трансформации данных в современных аналитических конвейерах (data pipelines). Объединение этих двух инструментов позволило аналитикам и инженерам данных выполнять те же задачи, что и с полноценными облачными хранилищами (например, Snowflake, BigQuery, Redshift), но на локальной машине или в однопроцессной среде.
Первая публичная версия адаптера была выпущена в 2021 году. Разработка ведётся сообществом, ключевым вкладом занимается компания MotherDuck (разработчик облачной версии DuckDB). Адаптер поддерживает все основные возможности dbt, включая материализации (таблицы, представления, инкрементальные модели), тесты, документацию и генерацию артефактов.
Архитектура и принцип работы
dbt-duckdb не требует установки DuckDB как отдельного сервера. Вместо этого он использует Python-библиотеку duckdb, которая загружает движок СУБД непосредственно в процесс Python. Это означает, что все операции выполняются в рамках одного процесса, без сетевых вызовов и накладных расходов на управление соединениями.
Основные компоненты
- Профиль подключения: В файле
profiles.ymlуказывается тип адаптера (duckdb), путь к файлу базы данных (если требуется сохранять данные на диск), а также параметры, такие как количество потоков и размер памяти. Если путь не указан, DuckDB работает в режиме in-memory. - Модели dbt: SQL-файлы с
SELECT-запросами, которые определяют, как преобразовывать исходные данные в выходные наборы. Адаптер транслирует эти запросы напрямую в DuckDB. - Материализации: Поддерживаются стандартные для dbt способы хранения результатов:
table— создание физической таблицы.view— создание представления.incremental— инкрементальная загрузка, где новые данные добавляются к существующей таблице.ephemeral— временная модель, существующая только в рамках одного сеанса.- Плагины и расширения: DuckDB поддерживает расширения (например, для чтения Parquet, JSON, CSV, а также для работы с геопространственными данными через
spatial). Адаптер позволяет загружать эти расширения через конфигурацию профиля.
Особенности работы с файлами
Одной из ключевых особенностей dbt-duckdb является возможность напрямую читать и писать файлы в форматах Parquet, CSV, JSON и других. Это позволяет использовать DuckDB как «виртуальную» базу данных, которая не требует импорта данных в собственный формат. Например, модель может читать Parquet-файлы из S3 или локальной файловой системы, преобразовывать их и записывать результат обратно в Parquet. Это делает адаптер популярным для ETL/ELT-процессов, где данные уже хранятся в файловых хранилищах (Data Lake).
Применение
dbt-duckdb используется в нескольких основных сценариях:
Локальная разработка и тестирование
Аналитики и инженеры данных часто применяют dbt-duckdb для быстрой проверки SQL-моделей на локальной машине, не подключаясь к дорогостоящим облачным хранилищам. Это позволяет отлаживать логику трансформаций, тестировать гипотезы и проверять качество данных до развёртывания в production-среде.
Анализ данных на одном компьютере
Для небольших объёмов данных (до десятков гигабайт) dbt-duckdb может полностью заменить полноценную базу данных. Пользователь может запускать dbt-проекты, которые читают данные из CSV-файлов, Excel-таблиц или Parquet, и получать результаты в виде отчётов или датасетов.
Обработка данных в Data Lake
Благодаря встроенной поддержке Parquet и интеграции с объектными хранилищами (S3, GCS, Azure Blob), dbt-duckdb часто используется для трансформации данных непосредственно в формате Data Lake. Это позволяет избежать этапа загрузки данных в отдельную БД.
Обучение и прототипирование
Адаптер популярен в образовательных целях, так как не требует установки сложной инфраструктуры. Студенты и участники курсов по dbt могут быстро развернуть рабочую среду на своём ноутбуке.
Преимущества и ограничения
Преимущества
- Простота установки и настройки: Не требуется администрирование базы данных. Достаточно установить Python-пакет
dbt-duckdb. - Высокая производительность для аналитических запросов: DuckDB использует векторизованное выполнение и колоночное хранение, что обеспечивает скорость, сопоставимую с коммерческими СУБД, на объёмах данных до 100 ГБ.
- Нулевая стоимость: DuckDB — open-source проект с лицензией MIT. Отсутствие затрат на лицензирование и серверные мощности.
- Поддержка современных форматов: Parquet, Arrow, Iceberg (через расширения).
- Интеграция с экосистемой Python: Возможность использовать Python-скрипты внутри моделей dbt (через макросы или плагины).
Ограничения
- Однопроцессная архитектура: DuckDB не поддерживает распределённые вычисления. Для обработки данных объёмом более 100–200 ГБ на одном узле производительность может снижаться.
- Отсутствие многопользовательского доступа: DuckDB не предназначен для одновременной работы множества пользователей. Это инструмент для однопользовательского или batch-режима.
- Ограниченная поддержка DML-операций: В отличие от PostgreSQL или MySQL, DuckDB не поддерживает полноценные UPDATE и DELETE с произвольными условиями (хотя в последних версиях появилась поддержка).
- Зависимость от Python: Для работы адаптера требуется среда Python, что может быть неудобно в некоторых инфраструктурах.
Пример использования
Типичный профиль для dbt-duckdb выглядит следующим образом:
```yaml
profiles.yml
my_project: target: dev outputs: dev: type: duckdb path: "my_database.duckdb" threads: 4 extensions:
- parquet
- httpfs
settings: memory_limit: "8GB" ```
После настройки профиля пользователь может запускать стандартные команды dbt:
``bash dbt run dbt test dbt docs generate ``
Сообщество и развитие
Проект активно развивается. Основные коммиты вносятся разработчиками из MotherDuck и сообщества dbt. Адаптер поддерживает версии dbt от 1.0 и выше. Регулярно выходят обновления, добавляющие поддержку новых функций DuckDB (например, Iceberg, Delta Lake, Full-Text Search).
В официальной документации dbt-duckdb приведены примеры интеграции с различными источниками данных, включая S3, Google Cloud Storage, Azure, а также с фреймворками для оркестрации (Airflow, Dagster). Проект имеет открытый исходный код на GitHub, где принимаются issue и pull request’ы.
Источники
- Официальная документация dbt-duckdb (GitHub, раздел
dbt-labs/dbt-duckdb). - Документация DuckDB (duckdb.org).
- Официальная документация dbt (docs.getdbt.com).
- Статья «dbt-duckdb: A Lightweight Alternative for Data Transformation» (блог MotherDuck).
- Репозиторий проекта на GitHub (github.com/dbt-labs/dbt-duckdb).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →