dbt (data build tool) — это фреймворк с открытым исходным кодом для выполнения, тестирования и документирования SQL-запросов, который позволяет привнести элемент программной инженерии в процесс анализа данных. Это всё о букве T в акрониме ELT (Extract — Transform — Load).
С появлением таких производительных и масштабируемых аналитических баз данных как BigQuery, Redshift, Snowflake, исчез какой-либо смысл делать трансформации вне Хранилища Данных.
dbt не выгружает данные из источников, но предоставляет огромные возможности по работе с теми данными, которые уже загружены в Хранилище (в Internal или External Storage).
Основное назначение DBT — взять код, скомпилировать его в SQL, выполнить команды в правильной последовательности в Хранилище.
dbt - это один из ключевых инструментов современной аналитики и modern data stack.
Давайте разберемся почему он завоевал любовь аналитиков и дата инженеров:
-
SQL код в базе? Прощайте, представления и хранимые процедуры. dbt позволяет хранить весь аналитический код в Git и воссоздавать все таблицы одной командой.
-
Запутались в обновлениях таблиц? dbt автоматически строит data lineage от источников до аналитических витрин, обеспечивая их своевременное и правильное обновление.
-
Ожидание готовности данных? С dbt аналитики могут самостоятельно трансформировать данные с помощью SQL, минуя необходимость в сложных инструментах вроде Spark или Hadoop.
-
Работа теряется среди таблиц? dbt создаёт интерактивный каталог данных с документацией, делая вашу работу видимой и понятной для всех участников процесса.
SQL + dbt = God Mode Data Modeling
Артемий Козырь — видео про подходы к созданию витрины корпоративных метрик. Артем рассказывает кейс решения бизнес-задачи — создания дашборда на 50 ключевых метрик для регулярной встречи топ-менеджеров.
На кейсе создания витрины корпоративных метрик рассмотрим:
— Элементы functional programming c dbt macros
— Интерактивный UX с dbt Power User + CLI
— Импорт и переиспользование кода с dbt packages
— Универсальный код и окружения с dbt adapters
Бизнес-задача: Дашборд для Weekly Business Review (WBR)
Требования к дашборду:
— Nesting: от верхнеуровневых метрик к детальным
— Набор измерений для Slice and Dice
— Формат графика для метрики
— Линии для Year over Year (abs + rel %)
— Визуализация целевых значений (targets)
— Решение «Hardcore Cube»
— Решение «Direct Runtime»
— Aggregate awareness (Looker) как оптимизация производительности
— Как отразилась смена СУБД с Amazon Redshift на Snowflake на решении?
Как всё это использовать у себя?
— Находите повторяющиеся паттерны и переиспользуйте код (DRY)
— Пишите универсальный код с dbt
— Не изобретайте велосипед - используйте packages
— Ищите баланс между материализацией и runtime queries
— Чем меньше кода, тем лучше
Кроме того, dbt предлагает тестирование качества данных, проверку соответствия данных заранее заданным условиям (data contracts), интеграцию с Airflow и многое другое, что делает его неотъемлемой частью современного аналитика.
Введение в dbt: основы моделирования данных | INZHENERKA.TECH
Тайм-коды:
00:00 Начинаем
02:04 Рассказываем об ИнженеркаТех
03:54 В чем практическая ценность dbt?
05:51 Начало Data Lake
08:35 Большие SQL скрипты
10:12 Glue Spark ETL
13:00 Решение через Data Builder
17:40 Как продать команде свое решение?
19:18 Преимущества data build tool
28:33 Анатомия проекта на дбт
30:00 Создаем проект
01:10:15 Моделирование данных с dbt
01:21:41 Проблемы с аналитикой в БД
01:27:50 Оркестрация data build tool
01:30:00 Преимущества на dbt
01:31:10 Подводные камни ди би ти
01:35:10 Симулятор data warehouse для аналитиков и инженеров данных
Построение дата платформы с помощью dbt
Интересный доклад Евгения Ермакова про построение дата платформы в toloka.ai, которая, получив независимость от Yandex, вынуждена была переезжать на новые технологии. В итоге, выбор пал на databricks, dbt, airflow и tableau. Автор рассказывает о том, почему был сделан такой выбор и как в итоге это все работает.
Основные моменты следующие:
- Сама toloka - это система для краудсорсинга, куда заказчики приходят с задачками навроде разметить данные, а с другой стороны на платформе зарегестрированы люди, которые их выполняют
- Архитектура базируются на трех китах:
-- Data lakehouse
-- Процессы в соответствии с подходом data mesh
-- Современный технологический стек
- До переезда на новые технологии ребята использовали много своего, часть из которого уже есть в opensource: YTsaurus, datalens
- После переезда выбрали новые технологии и dbt стал ядром системы, закрывая функциональность: data quality, data catalog/ data observability, batch processing (вместе со spark), orchestration (вместе с airflow)
- Изначально dbt (data building tool) нужен был в качестве удобного инструмента для transformation шага в ETL/ELT
- Интересно, что в концепции компании dbt есть мнение и относительно ролей, где помимо стандартных data engineers и data analysts появляется еще analytics engineer. В итоге, data engineers - это те, кто делают так, чтобы data платформа работала эффективно, data analysts ищут инсайты в данных и помогают их эффективно использовать, а вот analytics engineers - это ребята, что-то среднее между другими двумя + хорошо укладывается в концепцию data mesh, где нет централизованной дата-команды, а есть дата-команды по доменам
- Основой dbt-проекта является dbt model. Модель состоит из файла с описанием логики (.sql или .py файл) и файла с описанием конфигурации. В .sql файле есть запрос на формирование объекта, другие модели используются через ref() или source() + используется jinja шаблонизация. В .py файле возвращаем dataframe с рассчитанными данными, есть доступ ко всем возможностям pyspark + другие модели тоже используются через ref() или source()
- Материализацию запроса dbt берет на себя и есть разные стратегии, из которых самая интересная incremental
- Настройки хранятся в dbt_project.yaml и profiles.yaml
- dbt поддерживает большое количество баз данных, например, postgres, mysql, clickhouse, ...
- dbt - это консольная утилита, например, при запуске dbt build происходит сборка всех зависимостей между моделями, а также компиляция python/sql запросов и запись в manifest.json
- Команда dbt run запускает скомпилированные запросы, где запуск можно настроить по разному, но интересно запускать по графу
- Кстати, dbt умеет генерировать документацию командой dbt docs generate и дальше можно посмотреть на lineage данных
- Также мы можем писать тесты в том же месте, где мы описываем модели, а дальше запускать их при помощи dbt tests. Например, можем проверять unique или not null на поле, а также если хотим relations между моделями
- У dbt есть еще много возможностей, но про них стоит почитать самостоятельно:)
- Дальше автор рассказывает как сделать data mesh на уровне dbt + airflow. Автор рассматривает варианты вида:
-- Монолитный - один dbt проект на всю компанию
-- Микросервисный - отдельные dbt проекты на каждый домен
-- Layered - отдельные dbt проекты по уровням
-- Смешанный - анархия, где проекты создаются кто как хочет
Выбрали монолитный подход и получили аля монорепо под data mesh, в котором живут все. Обусловлено это было тем, что при микросервисном подходе ломались все связки между моделями (до 1.6 не могли называть модели одинаково в разных проектах + была проблема с импортом друг друга, так как это приводило к циклическим зависимостям).
Из интересного еще сделали конвертор графа исполнения dbt в airflow формат, чтобы запускать DAG из airflow.
В итоге, ребята реализовали свой подход к data mesh при помощи open source инструмнетов и вся схема выглядит достаточно стройно.,
Не всем компаниям нужен DBT
Интересное обсуждение на Reddit о том, нужен ли вашей компании DBT или его внедрение - это просто следование трендам.
1. With dbt you will move fast
Если вы не следуюете DBT way в работе, то ваша команда может двигаться медленее.
Многие команды пытались внедрить традиционное ETL-мышление в dbt и ухудшали ситуацию для себя и организации.
2. dbt will improve Data Quality and Documentation
dbt дает вам возможность генерировать документацию и добавлять тесты качества данных, но в этом нет никакой магии: кто-то должен это делать. Существует много проектов, в которых практически нет тестов DQ, а документация содержит только название столбцов.
3. dbt will improve your data pipeline reliability
Есть много проектов, в которых используется dbt, но нет процесса CI/CD для тестирования и развертывания кода или нет проверки кода и правильного моделирования данных. Код-спагетти, который у вас есть, возник не потому, что вы не использовали dbt.
4. You don't need an Orchestration tool with dbt
Целью dbt является преобразование ваших данных, и точка. У вашей платформы данных есть и другие этапы, которые должны работать гармонично. Что происходит, когда загрузка данных прерывается или задерживается? Как вы уже догадались, трансформация все еще продолжается, конечные пользователи считают, что отчеты обновлены, а вы проводите весь день, борясь с очередным пожаром. Вам всегда был нужен оркестратор, и dbt не решит эту проблему.
DBT — это не волшебная пуля, но это ингредиент в рецепте вашего успеха. При правильном подходе команды достигают своей цели, но организация должна понимать, что технология сама по себе не является решением. В вашем плане цифровой трансформации должен быть поток работы по переработке процессов с выделенными ресурсами для его реализации.
На канале Дмитрия Аношина, вышло 2 офигенных видео по DBT, при этом дополнительно узнаете о "наборе джентльмена" в системе контроля версий Git, настройке CI/CD в Git Actions, основы организации хранилищ данных и кучу всего интересного.
С ростом популярности dbt проекты становятся все масштабнее, а количество людей, работающих с данными, постоянно растет. В таких условиях поддержание качества данных и стабильности production-среды становится серьезным вызовом.
правильные практики разработки и тестирования критически важны для масштабных dbt проектов.
data load tool (dlt) это Python библиотека с открытым исходным кодом, которая упрощает загрузку данных https://github.com/dlt-hub/dlt