Обзор DBT
#Инструменты #ETL #DBT
DBT - инструмент для трансформации данных, уже загруженных в хранилище данных.
Отлично подходит для создания и поддержания витрин данных. Также полезен при формировании детального слоя, особенно если мы не работаем в сложных архитектурах, таких как Anchor Modeling, Data Vault.
Какие задачи можно решать с помощью DBT в разных областях работы с данными.
Преобразования данных на основе SQL
✅ Сделать CREATE TABLE … AS SELECT … (DBT Model)
✅ Указать БД особенности физического хранения таблицы в БД. Партиционирование, Engine, sort_by для Clickhouse; distribute_by для Greenplum. (DBT CONFIG)
✅ Создать инкрементальную Model и запускать CREATE TABLE или INSERT/MERGE при разных настройках запуска. (DBT materialize=incremental)
✅ Добавить любое количество технических запросов до расчета Model, например SET param = value, запрос у БД ресурсов, настройки и хинты планировщика в рамках сессии (DBT pre-hook).
✅Добавить любое количество технических запросов после расчета Model, например GRANT, ANALYSE, OPTIMISE, заархивировать в S3 для Redshift, передать в PXF External Table для Greenplum (DBT post-hook)
Разработка моделей
🛠 Шаблонизировать запрос через jinja
🛠 Написать макрос и сделать модель как вызов макроса с параметрами. Полезно при обработке большого количества однотипных схем. Или разбора полей JSON с большим количеством параметров таким, как каталог событий приложения.
Тестирование данных
👍 Задавать тесты данных методом простого редактирования YAML (DBT Tests)
👍 Написать свой generic test и вызывать его через YAML
👍 Скачать библиотеку тестов и использовать более сложные тесты (dbt-utils)
Сохранять снепшоты данных (DBT Snapshot)
👍 Интегрироваться и отслеживать тесты данных с помощью Great Expectations.
Data Governance
🪧 Отслеживать зависимости моделей от источников и моделей друг от друга
🪧 Просматривать зависимости и тесты в DBT Docs
🪧 Документировать описание схем, таблиц, колонок, тестов через YAML
🪧 Размечать источники данных через YAML
🪧 Разметить потребителей данных через YAML. Например, дашборды (для этого дашборда нужны такие-то витрины) или ML модели.
Аналитика
📊 Сохранять запросы в Git и уметь отслеживать целостность витрин данных для него
📊 Легко создавать и тестировать свои витрины данных, просто сохраняя в Git запросы в файле
📊 Не сохранять огромные SQL запросы для целей дашбординга или доступа к типовым данным, а делать витрины для них
ETL
⚡️ Интегрироваться с AIrflow, Dagster, запускать заадчи с CLI
⚡Запускать сложные комбинации взаимосвязанных задач. Запустить все что зависит от источника А. Обновить все необходимое для отчета/модели В, включая перерквизиты
⚡Запустить (или протестировать) все модели из папки Х, кроме тега Y в не более чем 4 потока с учетом зависимостей источников и моделей друг от друга.
⚡ Сохранять справочники в репозитории и управлять ими прямо из Git (DBT Seed)
Разработка
🪲 Разрабатывать DWH-as-Code. Хранить и изменять всю информацию в Git.
🪲 Легко создавать и управлять Dev, Test окружениями. Разделять на уровне инсталляций БД, логическими БД, наборами схем.
🪲 Создать CI контур DWH для end-to-end тестов честного итогового результата в виде витрин на семплах данных.
🪲 Делать blue-green deployment (DBT Clone)
Команда
🕶 Создавать для каждой команды песочницу в виде набора схем.
😎Управлять песочницей команды с помощью одного Airflow DBT Operator (DBT Run + DBT Test) с учетом изменяющихся внутренних зависимостей.
#Инструменты #ETL #DBT
DBT - инструмент для трансформации данных, уже загруженных в хранилище данных.
Отлично подходит для создания и поддержания витрин данных. Также полезен при формировании детального слоя, особенно если мы не работаем в сложных архитектурах, таких как Anchor Modeling, Data Vault.
Какие задачи можно решать с помощью DBT в разных областях работы с данными.
Преобразования данных на основе SQL
✅ Сделать CREATE TABLE … AS SELECT … (DBT Model)
✅ Указать БД особенности физического хранения таблицы в БД. Партиционирование, Engine, sort_by для Clickhouse; distribute_by для Greenplum. (DBT CONFIG)
✅ Создать инкрементальную Model и запускать CREATE TABLE или INSERT/MERGE при разных настройках запуска. (DBT materialize=incremental)
✅ Добавить любое количество технических запросов до расчета Model, например SET param = value, запрос у БД ресурсов, настройки и хинты планировщика в рамках сессии (DBT pre-hook).
✅Добавить любое количество технических запросов после расчета Model, например GRANT, ANALYSE, OPTIMISE, заархивировать в S3 для Redshift, передать в PXF External Table для Greenplum (DBT post-hook)
Разработка моделей
🛠 Шаблонизировать запрос через jinja
🛠 Написать макрос и сделать модель как вызов макроса с параметрами. Полезно при обработке большого количества однотипных схем. Или разбора полей JSON с большим количеством параметров таким, как каталог событий приложения.
Тестирование данных
👍 Задавать тесты данных методом простого редактирования YAML (DBT Tests)
👍 Написать свой generic test и вызывать его через YAML
👍 Скачать библиотеку тестов и использовать более сложные тесты (dbt-utils)
Сохранять снепшоты данных (DBT Snapshot)
👍 Интегрироваться и отслеживать тесты данных с помощью Great Expectations.
Data Governance
🪧 Отслеживать зависимости моделей от источников и моделей друг от друга
🪧 Просматривать зависимости и тесты в DBT Docs
🪧 Документировать описание схем, таблиц, колонок, тестов через YAML
🪧 Размечать источники данных через YAML
🪧 Разметить потребителей данных через YAML. Например, дашборды (для этого дашборда нужны такие-то витрины) или ML модели.
Аналитика
📊 Сохранять запросы в Git и уметь отслеживать целостность витрин данных для него
📊 Легко создавать и тестировать свои витрины данных, просто сохраняя в Git запросы в файле
📊 Не сохранять огромные SQL запросы для целей дашбординга или доступа к типовым данным, а делать витрины для них
ETL
⚡️ Интегрироваться с AIrflow, Dagster, запускать заадчи с CLI
⚡Запускать сложные комбинации взаимосвязанных задач. Запустить все что зависит от источника А. Обновить все необходимое для отчета/модели В, включая перерквизиты
⚡Запустить (или протестировать) все модели из папки Х, кроме тега Y в не более чем 4 потока с учетом зависимостей источников и моделей друг от друга.
⚡ Сохранять справочники в репозитории и управлять ими прямо из Git (DBT Seed)
Разработка
🪲 Разрабатывать DWH-as-Code. Хранить и изменять всю информацию в Git.
🪲 Легко создавать и управлять Dev, Test окружениями. Разделять на уровне инсталляций БД, логическими БД, наборами схем.
🪲 Создать CI контур DWH для end-to-end тестов честного итогового результата в виде витрин на семплах данных.
🪲 Делать blue-green deployment (DBT Clone)
Команда
🕶 Создавать для каждой команды песочницу в виде набора схем.
😎Управлять песочницей команды с помощью одного Airflow DBT Operator (DBT Run + DBT Test) с учетом изменяющихся внутренних зависимостей.
👍4
Примеры DBT репозиториев
Интересный [DBT + Airflow + Clickhouse] репозиторий, застывший в миграции с кастомных ДАГов на DBT. Проект по оценке пользовательских аудиторий крипто-токенов и аналитики аудиторий крипто-проектов. В проекте я участвовал как консультант. Закрыт в 2023 году.
😞 😞 😞 😞 😞 😞 😞 😞 😞
https://github.com/superdao-inc/airflow-dags
Здесь можно найти остатки самописного SQL бойлерплейта и оценить, как переход на DBT сильно облегчает разработку. Также есть кликхаусификация DBT-моделей и несколько специфичных фишек, актуальных именно для Clickhouse. К примеру, вот такая моделька, в которой Clickhouse валится в огромном (3 TB) Group BY запросе, так как ему не хватает RAM. Решение - разбить запрос на чанки по адресам, каждый из которых меньше по размерам, чем весь массив эфириумных транзакций. В DBT модель встроен проброс массива первых букв кошельков, который формируется циклом в Airflow DAG. Или вот такой Generic Test, который проверяет, что в текстовом поле не абы что, а эфириумный адрес-хэш. Есть и макросы-шаблоны запросов, которые после применяются в нескольких моделях для разных эфириумных сеток.
Одним словом, рекомендую сделать dbt docs generate и походить по разным моделькам, макросам и тестам. Стартаперский творческий беспорядок прилагается.
🤪 🤪 🤪 🤪 🤪 🤪 🤪 🤪 🤪
Мой учебный репозиторий [DBT + Airflow + Greenplum]
https://github.com/alex-belozersky/dataplatform
Сейчас в процессе добавления в него интеграции DBT + Trino + Iceberg. Поставьте GitHub звезду, если интересно
😏 😏 😏 😏 😏 😏 😏 😏 😏
#DBT #GitHub
Интересный [DBT + Airflow + Clickhouse] репозиторий, застывший в миграции с кастомных ДАГов на DBT. Проект по оценке пользовательских аудиторий крипто-токенов и аналитики аудиторий крипто-проектов. В проекте я участвовал как консультант. Закрыт в 2023 году.
https://github.com/superdao-inc/airflow-dags
Здесь можно найти остатки самописного SQL бойлерплейта и оценить, как переход на DBT сильно облегчает разработку. Также есть кликхаусификация DBT-моделей и несколько специфичных фишек, актуальных именно для Clickhouse. К примеру, вот такая моделька, в которой Clickhouse валится в огромном (3 TB) Group BY запросе, так как ему не хватает RAM. Решение - разбить запрос на чанки по адресам, каждый из которых меньше по размерам, чем весь массив эфириумных транзакций. В DBT модель встроен проброс массива первых букв кошельков, который формируется циклом в Airflow DAG. Или вот такой Generic Test, который проверяет, что в текстовом поле не абы что, а эфириумный адрес-хэш. Есть и макросы-шаблоны запросов, которые после применяются в нескольких моделях для разных эфириумных сеток.
Одним словом, рекомендую сделать dbt docs generate и походить по разным моделькам, макросам и тестам. Стартаперский творческий беспорядок прилагается.
Мой учебный репозиторий [DBT + Airflow + Greenplum]
https://github.com/alex-belozersky/dataplatform
Сейчас в процессе добавления в него интеграции DBT + Trino + Iceberg. Поставьте GitHub звезду, если интересно
#DBT #GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - superdao-inc/airflow-dags
Contribute to superdao-inc/airflow-dags development by creating an account on GitHub.
⚡5❤2👍2