Проблемы прошлого:
Наши витрины в прежней системе создавались с большими трудностями:
- Скрытая логика: Основная часть логики была спрятана в сложных схемах KNIME, которые были понятны только их авторам.
- Сложные SQL-скрипты: Часть логики реализована в громоздких и неподдерживаемых SQL-скриптах.
- Отсутствие переиспользования: Для создания новой витрины приходилось писать всё с нуля, часто копируя существующий код.
- Недостаток документации: Документация либо отсутствовала, либо быстро устаревала.
- Ручное тестирование: Проверка данных проводилась вручную, что отнимало много времени.
Наше решение: dbt-core как основа трансформаций.
Мы внедрили dbt (data build tool) для построения слоя Common Data Marts – единых и документированных витрин, которые стали важной частью нашей слоистой архитектуры:
- Доменная организация: Модели разбиты по бизнес-доменам (customers, marketing, orders, products, sandbox, segmentation, tv_broadcast), что позволяет избежать монолитных скриптов и обеспечивает четкую структуру проекта.
- Принцип DRY (Don't Repeat Yourself): Общая логика вынесена в макросы и базовые модели. Финальные витрины (marts_) строятся поверх них с помощью простых и понятных запросов SELECT.
- SQL, документация и тесты: Код моделей написан на чистом SQL. Описания моделей и полей, а также тесты на уникальность, свежесть и согласованность значений задаются в .yml-файлах рядом с кодом. Команда dbt docs generate создает актуальный каталог данных.
- Гибкость через Jinja: Шаблонизация позволяет создавать параметризуемые модели без дублирования кода.
Интеграция с Airflow через dbt-af от Toloka
Для интеграции dbt в нашу экосистему мы используем библиотеку dmp-af от команды Toloka, которая позволяет автоматически генерировать DAG'и для dbt-проекта и интегрировать их с Airflow:
- Автоматическая генерация DAG'ов: dbt-af автоматически создает Airflow DAG'и на основе структуры dbt-проекта, разделяя модели по доменам и создавая отдельные DAG'и для каждого домена. Это позволяет запускать модели из разных доменов параллельно.
Преимущества интеграции:
- Единая оркестрация: Витрины запускаются как часть общих Airflow DAG'ов после обновления DDS-слоя, без необходимости ручных запусков или внешних скриптов.
- Мониторинг и алерты: Статус выполнения задач dbt и ошибки тестов отображаются в интерфейсе Airflow и отправляются в уведомления.
- Ресурсный контроль: Задачи dbt выполняются в Docker-контейнерах с выделенными ресурсами (CPU, RAM), не влияя на другие процессы.
- Текущий режим работы: На данный момент dbt работает в "онлайн-режиме", без полной интеграции в CI/CD pipeline. Это означает, что обновления кода и запуск моделей выполняются по мере необходимости, но мы планируем внедрить автоматизацию через CI/CD в будущем, как это сделано для других компонентов системы.
Отдельно хочется выделить важнейшее архитектурное свойство нашей новой связки Airflow + dbt — идемпотентность (re-runnability).
В старой системе на самописных скриптах любая ошибка при загрузке означала долгий ручной разбор полетов, написание скриптов отката и риск задублировать данные.
Теперь, если что-то пошло не так (например, сбойнула сеть или источник отдал некорректные данные), дата-инженеру достаточно просто нажать кнопку Clear task в интерфейсе Airflow. Инструмент dbt сам поймет, как безопасно пересчитать этот кусок: он "под капотом" выполнит delete + insert для инкрементальной модели за нужный день. Никаких дублей и никакого ручного вмешательства в базу. Пайплайн можно перезапускать хоть 10 раз подряд — результат всегда будет корректным. Это радикально снизило уровень стресса в команде эксплуатации и повысило доверие к данным.
Рабочая среда для аналитиков:
Чтобы аналитики могли эффективно работать с dbt, мы развернули VS Code в отдельном контейнере, где они могут писать модели, не заходя в CLI.
Аналитики просто создают и редактируют SQL-файлы моделей в привычной среде разработки, а dbt-af автоматически генерирует необходимые DAG'и на основе структуры проекта.
Это значительно упрощает работу с платформой и снижает порог входа для аналитиков.
Обучение и поддержка аналитиков:
Мы организовали для аналитиков внутреннее обучение, где объяснили основы работы с dbt и новой платформой.
Также мы разработали подробные мануалы по созданию и управлению моделями, что позволило аналитикам быстрее адаптироваться к новому инструменту.
Теперь они могут самостоятельно разрабатывать витрины под руководством и с ревью от дата-инженера.