asapBI: архитектура ETL процессов – Airflow, Trino, Spark и прочий зоопарк
19 мар 2026
Чего хочется от ETL процесса?
- Простые процессы – например, проброс данных из одной таблицы в другую с промежуточным расчетом – графический мэппинг полей. Таких простых пробросов – 90%, не хочется лазить по SQL-коду.
- Сложные процессы – только тогда уже в бой идет ручной SQL, Python, Java, Scala, R.
- Длительные процессы – тогда их лучше выполнять на внешних кластерах Trino, Spark, Impala – как говорится, хранилища отдельно, считалища – отдельно.
- Единая точка контроля – нужна только одна точка контроля загрузок, не дело, когда мониторинг раскидан по разным системам.
- Оффлайн-разработка – в связи с последними (?) событиями было бы здорово иметь возможность заниматься разработкой в оффлайне: сидишь в палатке без 5G, разрабатываешь модели и тестируешь трансформации и цепочки локально, а вечером результат сбрасываешь в общую систему через Wi-Fi придорожного кафе.
Почему Open Source?
- Больше программистов на рынке труда, много документации
- Убираем вендор-лок
- Используем поддерживаемые современные решения
Как бы нам это все замиксовать?
Принцип работы asapBI: единый интерфейс
Обычно на проекте существует множество систем со своими интерфейсами. Создаваемых объектов много, надо не забывать, где что лежит и как завязано.
По идее, хорошо бы иметь единый интерфейс, где объекты, рассыпанные по разным системам, связаны между собой.
Единый интерфейс просто объединяет в себе удобную работу с разными инструментами. Именно этот принцип я и реализую в asapBI.
Архитектура asapBI: оркестратор процессов
Практический пример: создаём DTP и цепочку загрузки
Пройдемся по ETL-процессам в asapBI.
Единицей процесса является DTP – Data Transfer Process (хе-хе, привет саперам! 😉) – это алгоритм заполнения одной таблицы из других, возможно находящихся в других базах.
Пример DTP
На вкладке Transformation создается мэпинг полей. В общем случае, если выбирается среда выполнения Trino или Spark, возможна передача данных между разными базами – например, из Greenplum в Clickhouse.
Деплой в Airflow, выполнение на Spark
У системы есть коннект к Airflow – мы можем разместить этот DTP там. У Airflow, в свою очередь, есть коннект к Spark – выберем его, чтобы Airflow передавал наш DTP на кластер Spark для выполнения.
Можно выбрать язык реализации – это третий выпадающий список Execution language. Для Spark это либо SQL, либо Python.
Просмотр и редактирование сгенерированного кода
Готовый код можно увидеть и отредактировать на вкладке Code:
В Python-варианте автогенерация для Spark выглядит следующим образом:
Работа с Airflow
При сохранении DTP в Airflow создается готовый к выполнению даг:
Эти даги можно запускать и отлаживать как в интерфейсе Airflow, так и в интерфейсе asapBI:
Цепочки задач (DAG)
Даги можно собирать в цепочки (в терминах Airflow это тоже будут даги) – пример цепочки:
Простую цепочку можно создать, добавив разные DTP в дерево задач (блок Tasks). Если же нужны условные операторы, циклы и прочие излишества – тогда правим автоматически сгенерированный код дага:
Тот же самый список цепочек можно увидеть и запустить в стандартном интерфейсе Airflow — правда здесь цепочки не разложены по папкам, как в дереве asapBI:
Преимущества параллельного выполнения
🔴 SAP подход
Не приветствовался параллельный запуск множества DTP. Приходилось ставить их друг за другом.
Проблемы: нерассчитанные к утру витрины, пошаговая ручная перезагрузка упавшей части цепочки.
🟢 Airflow подход
Можно строить цепочки с параллельным запуском множества дагов — оркестратор запускает одновременно столько задач, сколько сможет «прожевать».
Преимущества: параллелизация независимых шагов, автоматический рестарт упавших задач, реальная независимость процессов.
Деплой без оркестратора
Если на проекте нет оркестраторов – ни Airflow, ни Dagster – можно выбрать для деплоя базу и автоматически сгенерировать там функцию:
Сам сгенерированный код функции тоже можно поправить:
🔮 Будущее профессии: заменит ли ИИ дата‑инженеров?
Предполагается широкое использование ИИ типа «Пробрось новое поле из такого-то источника до такой-то витрины».
Только вот неясно – может быть с развитием ИИ все эти модели будут не нужны? Данные ведь можно сваливать в Data Lakehouse и давать задачу ИИ проанализировать и сразу выдать инсайт без этих ваших (наших) дашбордов и моделей.
Что думаете вы? Станет ли SQL новым Ассемблером, а визуальные построители и ИИ — основным инструментом дата-инженера?