Интеграция dbt с YDB
Введение
dbt (data build tool) - инструмент для трансформации данных в аналитических хранилищах, предназначенный для организации процессов разработки моделей данных по аналогии с разработкой программного обеспечения. Он охватывает этап трансформации (T) в ETL-пайплайнах и позволяет структурировать логику преобразований - от сырых данных до витрин - с поддержкой тестирования, документирования и data lineage - сквозной прослеживаемости данных от источника до конечной модели.
Модели в dbt определяются единообразно - как SELECT
-выражения, что упрощает их сопровождение и композицию. Инструмент обеспечивает их материализацию в хранилище данных, а также отслеживает зависимости между моделями, в том числе в процессе эволюции одних и тех же данных через стадии преобразований.
Для интеграции dbt с YDB используется коннектор dbt-ydb. Он обеспечивает подключение к YDB в качестве целевой платформы и поддерживает материализацию моделей в виде таблиц и представлений, работу с инкрементальными данными, загрузку тестовых датасетов (seeds), а также выполнение тестов и генерацию документации.
В этом разделе описаны возможности коннектора, а также шаги по его первоначальной настройке и запуску.
Важно
Коннектор dbt-ydb находится в стадии Preview и, в настоящий момент, не обеспечивает поддержку всех возможностей dbt. Ниже приводится список возможностей и ограничений.
Возможности
Модели и их материализация
Ключевое понятие dbt — модель данных. По своей сути, это SQL‑выражение, в котором могут быть использованы все источники данных внутри вашего хранилища, включая другие модели. Существуют разные подходы к физическому созданию модели (ее материализации) внутри YDB, которые поддерживает коннектор dbt-ydb:
-
Представление (view) — сохраняется как представление YDB.
-
Таблица (table) — сохраняется как таблица внутри YDB и пересоздаётся при каждом обновлении модели силами dbt.
dbt-ydb коннектор поддерживает возможность определять следующие параметры таблицы через конфигурацию модели:
Параметр Обязательность Значение по умолчанию Описание primary_key Да Первичный ключ таблицы store_type Нет row Тип таблицы. 'row' - для строковой таблицы и 'column' для колоночной таблицы auto_partitioning_by_size Нет Автоматическое партиционирование по размеру auto_partitioning_partition_size_mb Нет Порог размера партиции ttl Нет Правило Time-To-Live Пример модели, материализуемой как таблица на основе другой модели (связаны через ref).
Заданы первичный ключ, TTL и автоматическое партиционирование по размеру.{{ config( primary_key='id, created_at', store_type='row', auto_partitioning_by_size='ENABLED', auto_partitioning_partition_size_mb=256, ttl='Interval("P30D") on created_at' ) }} select id, name, created_at from {{ ref('source_table') }}
-
Инкрементальное представление (incremental model) — создаётся как таблица внутри YDB, но при обновлении не пересоздаётся, а обновляется изменившимися и новыми строками.
dbt-ydb коннектор поддерживает те же параметры, что определены для табличной материализации, а также уникальные параметры инкрементального представления:
Параметр Обязательность Значение по умолчанию Описание incremental_strategy Нет MERGE Стратегия инкрементальной материлазации. Поддерживается стратегия MERGE, использующая YDB операцию UPSERT. Поддержка стратегии APPEND находится в разработке
Примечание
Еще один тип материализации, эфемерное представление, в данный момент не поддерживается коннектором.
Снепшоты
Механизм снепшотов в данный момент не поддерживается dbt-ydb.
Тестовые/справочные данные, создаваемые из файлов CSV (сиды)
dbt-ydb коннектор поддерживает возможность dbt определять сиды для загрузки справочных и тестовых данных из CSV‑файлов в ваш проект и их использование в других моделях.
Тестирование данных
dbt-ydb поддерживает стандартные тесты данных dbt, а также специфичные тесты в рамках возможностей YQL.
Генерация документации
dbt-ydb поддерживает создание документации из проектов dbt для YDB.
Подготовка к использованию
Зависимости
Для начала работы с dbt на YDB вам понадобятся:
- Python 3.10+;
- dbt Core (1.8+);
- Существующий кластер YDB, однонодовая инсталляция из быстрого старта будет достаточной.
Примечание
Внимание! dbt Fusion (2.0) в данный момент не поддерживается.
Установка
Для установки dbt-ydb выполните
pip install dbt-ydb
Подключение dbt к YDB кластеру
dbt подключается к YDB через dbt-ydb коннектор стандартным для YDB образом. Для успешного подключения требуется указать эндпоинт, путь к базе данных, а также параметры аутентификации в файле профилей dbt.
Пример файла профилей с возможными вариантами аутентификации, а также значениями по умолчанию (в квадратных скобках)
profile_name:
target: dev
outputs:
dev:
type: ydb
host: [localhost] # YDB host
port: [2136] # YDB port
database: [/local] # YDB database
schema: [<empty string>] # Optional subfolder for DBT models
secure: [False] # If enabled, grpcs protocol will be used
root_certificates_path: [<empty string>] # Optional path to root certificates file
# Static Credentials
username: [<empty string>]
password: [<empty string>]
# Access Token Credentials
token: [<empty string>]
# Service Account Credentials
service_account_credentials_file: [<empty string>]
Создание проекта "c нуля" через команду dbt init
-
Инициализация проекта
dbt init
-
Cледуйте интерактивным подсказкам dbt для выбора коннектора dbt-ydb и настроек аутентификации, подходящих для вашего кластера YDB
-
В результате директория с вашим проектом, а также файл профилей dbt в домашней директории пользователя будет создан или обновлен новым соединением к YDB
~/.dbt/profiles.yml
-
Запустите команду dbt debug для проверки соединения
dbt debug
-
Внутри директории вашего проекта, вы увидите следующую структуру
-
Адаптация модели my_first_dbt_model
В данный момент dbt не поддерживает возможности модификации автоматически генерируемого примера индивидуально под коннектор, поэтому, для запуска данной модели через dbt-ydb требуется ее обновить следующим образом:
/* Welcome to your first dbt model! Did you know that you can also configure models directly within SQL files? This will override configurations stated in dbt_project.yml Try changing "table" to "view" below */ {{ config(materialized='table', primary_key='id') }} select * from ( select 1 as id union all select null as id )
-
Теперь вы можете запустить ваш проект
dbt run
Запуск тестового примера
Вместе с коннектором dbt-ydb поставляется пример, который можно использовать для быстрой проверки возможностей dbt для YDB
-
Клонирование репозитория
git clone https://github.com/ydb-platform/dbt-ydb.git cd dbt-ydb/examples/jaffle_shop
-
Настройка файла профиля подключения к вашей YDB в файле
profiles.yml
. Для однонодовой инсталляции из быстрого старта файл будет выглядеть следующим образомprofile_name: target: dev outputs: dev: type: ydb host: localhost # Хост YDB port: 2136 # Порт YDB database: /local # База данных YDB schema: jaffle_shop
-
Проверьте подключение
dbt debug
-
Подготовьте тестовые данные через seeds
Эта команда загрузит CSV-файлы из директории
data/
в таблицыraw_*
YDB.dbt seed
-
Запустите выполнение моделей
Будут созданы таблицы и представления на основе примеров моделей проекта.
dbt run
-
Протестируйте данные в моделях
Данная команда выполнит стандартные проверки данных, описанные в тестовом примере — проверки на
null
, на допустимые значения списка и другие.dbt test
-
Сгенерируйте документацию и запустите локальный веб-сервер для её просмотра
Документация по проекту будет доступна в браузере: http://localhost:8080.
dbt docs generate dbt docs serve --port 8080
Дальнейшие шаги
Официальную документацию dbt можно найти по ссылке.
Дополнительно вы можете изучить исходный код коннектора, а также поучаствовать в его развитии в публичном репозитории dbt-ydb на GitHub.