Закрыть
Получить бесплатный доступ к DataPulse
Наш менеджер свяжется с вами для предоставления бесплатного доступа и презентует наш сервис
DBT – это инструмент для трансформации данных прямо в вашей базе. Проще говоря, вместо того чтобы писать десятки SQL-скриптов, мы описываем модели, зависимости между ними и получаем управляемый проект трансформаций.
PostgreSQL – база данных, которую можно смело назвать самой популярной в мире. Она бесплатна, открыта, поддерживает огромное количество расширений и отлично подходит не только для OLTP, но и для аналитических задач.

Установка dbt и пакета dbt-postgres

Все начинается с установки. Нам нужен сам dbt и адаптер для PostgreSQL:
Поддерживаются версии dbt v0.4.0 и выше.
На этом этапе часто возникают вопросы про окружение.
Совет простой: используйте virtualenv или poetry, чтобы зависимости проекта не конфликтовали.

psycopg2 vs psycopg3

Под капотом dbt использует драйвер для подключения к PostgreSQL. На данный момент это psycopg2. У него есть обычная версия и бинарная (binary). Бинарная иногда может пригодится, если по каким-то причинам обычная версия не ставится. К примеру, ваша машина не подходит по железу под требования psycopg2.
А вот psycopg3 — это новая, современная версия драйвера. Но dbt пока с ним не дружит
Устанавливать отдельно psycopg2 не потребуется. Он ставится автоматически при установке dbt-postgres.

Инициализация проекта

Когда dbt установлен, можно инициализировать проект:
После этого появится структура папок:
  • models/ — здесь живут SQL-модели
  • seeds/ — CSV-шки, которые можно загрузить в базу
  • macros/ — ваши собственные функции на Jinja
  • snapshots/ - снэпшоты ваших моделей (версионность)
  • tests/ — тесты на данные
Это и есть сердце dbt: код проекта лежит в понятной структуре, а не в разрозненных скриптах.
Дополнительно появятся два главных файлика для созданного проекта: dbt_projects.yml и profiles.yml
Подключение к базе данных
Подключение описывается в файле profiles.yml.
Здесь в примере используется два разных подключения: для dev и prod. В target указывается, какое подключение активно сейчас – target: dev. Таким образом можно менять target.

Конфигурация проекта: dbt_project.yml

Файл dbt_project.yml — это сердце вашего проекта. Именно здесь dbt понимает, как он называется, где искать модели и какие настройки применять по умолчанию.
Минимальный пример:
Что здесь важно:
  • name— имя проекта. Оно должно совпадать с названием в profiles.yml.
  • profile — ссылка на тот профиль, который описан в profiles.yml.
  • model-paths — где искать модели (по умолчанию models/).
  • models — настройки по умолчанию для моделей. Тут можно задавать:
▫︎ стратегию материализации (view, table, incremental),
▫︎ схему, в которую будут складываться модели,
▫︎ параметры вроде indexes, unlogged и т.д.
Классная штука — наследование настроек. В примере выше:
  • все модели по умолчанию материализуются как view;
  • в папке staging они будут таблицами и складываться в схему stg;
  • в папке marts будут инкрементальными и складываться в схему mart.
Это очень удобно: один раз описали правила — и dbt сам всё разруливает.

Первая модель

Первая модель — это обычный SQL-файл. Допустим, у нас есть таблица заказов, и мы хотим взять только оплаченные:
Файл кладём в models/paid_orders.sql. Дальше — dbt run, и у вас появляется готовая витрина.

Типы моделей

Dbt умеет создавать разные объекты в PostgreSQL
Стратегии incremental:
  • append — просто добавляем новые строки. Подходит для логов или событий.
  • delete+insert — удаляем данные за период и вставляем заново. Классика для витрин по датам.
  • merge — обновляем строки, если ключ совпадает, или вставляем новые. Работает похоже на upsert.
  • microbatch — более свежий подход, когда данные подкачиваются небольшими порциями. Удобно, если таблицы большие и есть задержки.

Оптимизация dbt моделей в PostgreSQL

В dbt для PostgreSQL можно оптимизировать вашу таблицу, если она стала слишком большой и теперь долго обновляется или долго join-ится.
  • unlogged — можно создать таблицу как unlogged. Такие таблицы не пишутся в WAL, и операции вставки значительно быстрее. Для аналитических хранилищ данных далеко не всегда нужно писать WAL-журнал.
  • indexes — никто не отменял индексы. В dbt можно прямо в config описать создание индексов для нужных полей. Это реально ускоряет джойны и фильтрацию.

Партиционирование

На текущий момент в dbt нет возможности создавать партиции для таблиц PostgreSQL. А ведь это основной инструмент оптимизации, особенно если мы говорим про DWH.
Поэтому в Datapulse мы реализовали подобный функционал, который в dbt создает партиционированные таблицы.

Документация

Более подробно вы можете ознакомиться в документации: здесь и здесь.

закажите
демо-версию
datapulse

оставьте ваши контакты и наш менеджер свяжется с вами
Закрыть

Получить бесплатный доступ к DataPulse

Наш менеджер свяжется с вами для предоставления бесплатного доступа и презентует наш сервис