Airflow в 2026? На каком движке построить DWH

Эта статья для владельцев бизнеса, директоров e-commerce и техдиров, которые торгуют на маркетплейсах и думают о своём хранилище данных.
Мы работаем с компаниями, у которых суммарный оборот по маркетплейсам от 100 млн ₽ в год. Ниже этой планки, честно сказать, полноценный DWH редко окупается. Выше — уже больно жить в Excel, выгрузках из кабинета и «сводной табличке, которую делает Вася».
В этой статье объясню, что происходит внутри ETL-движка, зачем вообще нужен Airflow, чем он отличается от простого cron и почему дата-инженер не должен сидеть у вас в штате фулл-тайм годами.
1. Зачем вообще нужен отдельный движок для ETL
Чтобы хранилище данных работало, нужно каждый день делать три простые вещи:
- Забрать данные из источников: Ozon, Wildberries, Яндекс.Маркет, реклама, внутренняя бухгалтерия/ERP.
- Привести их в порядок: почистить, разложить по таблицам, связать между собой.
- Сложить в DWH — в то место, где аналитик или отчёт BI найдёт всё за секунды.
Вот этот конвейер и есть ETL-движок. Даже если сегодня вы «просто выгружаете CSV и загружаете в Excel», у вас уже есть ETL — просто он живёт в головах и руках сотрудников.
Проблема в том, что:
- люди устают, ошибаются и уходят,
- правила маркетплейсов меняются,
- API ломаются,
- а данные вам нужны каждый день и ночью.
Поэтому в какой-то момент бизнес дорастает до автоматического движка. Вопрос не «нужен он или нет». Вопрос «какой» и «чтобы потом не было больно».
2. Почему «systemd + cron» — это тупик, а не решение
Мы тоже когда-то начали с минимализма. Скрипты на Python, systemd-таймеры, немного логов в файлы — и поехали.
На старте это красиво:
- ничего лишнего,
- нет лишних зависимостей,
- админ понимает, что где запускается.
Но через несколько месяцев у вас уже не три скрипта, а сотни задач:
- вы тянете цены,
- остатки по FBO и FBS,
- транзакции и операции,
- рекламные расходы,
- ставки и карточки,
- отзывы, претензии и жалобы.
Каждый источник — со своей периодичностью и своим характером ошибок.
И вот здесь начинаются проблемы.
Что начинает болеть
- Логи. Они лежат в файлах. Чтобы понять, что сломалось, надо залезть на сервер, открыть правильный лог, вспомнить формат.
- Мониторинг. Хочется понять: «Сегодня всё собралось или нет?», а не лазить по каталогам и grep’ом искать “ERROR”.
- Повторный прогон периода. В январе Ozon внёс изменения в API. Полмесяца вы собирали данные неправильно. Теперь нужно пересчитать только январь. В systemd это превращается в магию с параметрами и руками в консоли.
- Зависимости. Скрипт транзакций должен запускаться только после того, как обновились справочники товаров. Cron и systemd не умеют в это по-человечески.
Даже если прикрутить Grafana и Prometheus, вы всё равно видите только «упало / не упало». Понять «где и почему» — отдельный квест.
Вывод. systemd и cron подходят как временное решение или для одной-двух простых задач. Но для стабильного DWH продавца маркетплейсов этого мало.
3. Почему не взять Enterprise-решение и забыть
На рынке полно больших красивых решений:
- Azure Data Factory
- Microsoft Synapse / Integration Services
- Snowflake с их пайплайнами
- Databricks и прочие крупные платформы
У них есть плюсы:
- удобный интерфейс,
- куча интеграций,
- готовые коннекторы.
Но есть три «но»:
- Цена. Для оборота 100–500 млн ₽ в год это часто слишком тяжёлая пушка. Подписка, лицензии, консалтинг — счёт идёт на десятки и сотни тысяч евро в год.
- Юрисдикция и доступность. Часть решений недоступна для компаний, связанных с Россией. Ограничения, санкции, вопросы комплаенса.
- Избыточность. Вам не нужен Greenplum-кластёр, Spark-ферма и Kafka-зоопарк, если вы работаете с данными одной компании, а не всего рынка.
Наши клиенты обычно хотят простую, понятную и свою систему:
- которая живёт на их серверах или в их облаке,
- которую можно объяснить владельцу бизнеса за 10 минут,
- которую не страшно поддерживать несколько лет.
Отсюда логичный выбор — open-source движок, который можно развернуть, настроить и забыть.
4. Почему мы используем Airflow
Airflow — это открытый инструмент Apache для оркестрации ETL-процессов. Работает по простому принципу:
- вы описываете задачи на Python,
- объединяете их в DAG (граф),
- Airflow сам решает, что, когда и в каком порядке запускать.
Что важно для бизнеса:
- Есть UI. Не нужно заходить на сервер и читать логи в vim. Открыл браузер — видишь, какие задачи зелёные, какие красные.
- Видно дерево задач. Понятно, что за чем идёт: сначала справочники, потом транзакции, потом витрины.
- Есть история. Можно посмотреть, что происходило вчера, месяц назад, год назад.
- Есть перезапуск. Можно выбрать интервал (например, январь), нажать пару кнопок — и пересчитать только его.
Современный Airflow уже не выглядит как «страшная панель для хакеров». Интерфейс стал нормальным рабочим инструментом, который понимает даже менеджер: зелёное — хорошо, красное — плохо, на задачу можно нажать и прочитать, почему она упала.
5. Как Airflow решает реальные проблемы e-commerce
Возьмём Ozon.
Там десятки видов операций в отчётах: продажи, возвраты, списания, логистика, услуги, штрафы, комиссии. Документация не всегда полная. Часто ошибки описаны одной строкой или не описаны вовсе.
Что происходит в реальной жизни:
- вы написали код за пару часов;
- он работает на тесте;
- на проде начинает падать из-за новых редких ошибок и особых типов операций;
- половину времени вы тратите не на разработку, а на ловлю исключений.
Airflow сильно облегчает эту боль.
Примеры того, как он помогает
- Retry’и. Если Ozon временно возвращает ошибку или лимит запросов исчерпан, задача сама попробует ещё раз через заданный интервал.
- Разные ветки поведения. Можно описать логику: — если ошибка вот такая — попробуй другой API-ключ; — если вот такая — подожди и повтори; — если совсем критично — остановись и пошли уведомление.
- Уведомления. Упала задача по транзакциям — Airflow может отправить сообщение в Telegram или на почту ответственного.
- Чёткое место падения. Вы видите не просто «скрипт transactions.py упал». Вы видите: «задача “Загрузка транзакций за 2025-01-18” упала на шаге “Запись в таблицу fact_transactions” из-за такой-то ошибки».
Вместо хаоса вы получаете список конкретных задач, с которыми можно работать.
6. Для техдиров: что происходит под капотом
Для техдиров. Если кратко, мы используем Airflow как оркестратор поверх обычного Python-кода.
Типичный стек для продавца маркетплейсов:
- PostgreSQL для «операционного» слоя и части витрин;
- ClickHouse для тяжёлой аналитики по транзакциям и длинной истории;
- коннекторы к Ozon / Wildberries / рекламным сетям;
- Airflow управляет расписанием и зависимостями.
Почему без тяжёлой артиллерии вроде Greenplum и Kafka можно жить спокойно:
- мы работаем с данными одной компании, а не всего рынка;
- размеры данных обычно измеряются десятками/сотнями миллионов строк, а не миллиардами в день;
- нагрузка предсказуемая: ночные джобы, дневные дельты, иногда — ближе к real-time по узким местам.
Чаще всего хватает схемы:
- staging — сырые JSONB из API;
- core — нормализованные fact/ dim таблицы;
- marts — витрины под аналитику и отчёты.
Airflow при этом:
- запускает пайплайны по расписанию или по событиям;
- даёт единый слой наблюдаемости;
- позволяет безопасно дорабатывать DAG’и и возвращаться к старым версиям логики.
Нам важнее, чтобы система была простой и прозрачной, чем гипер-оптимальной и сложной.
7. Как устроено хранилище продавца Ozon (и чем тут помогает SCD2)
В хранилище маркетплейсов есть два типа таблиц:
- Измерения (dim). Товары, бренды, категории, склады, партнёры.
- Факты (fact). Транзакции, остатки, цены, рекламные показы/клики/расходы.
У измерений есть неприятная особенность: всё постоянно меняется.
- название товара правят маркетологи;
- карточка переезжает в другую категорию;
- меняется бренд, упаковка, поставщик.
Если просто переписывать данные «поверх», вы теряете историю: почему в отчёте за прошлый год товар уже называется по-новому.
Поэтому мы используем SCD-2 (slowly changing dimensions, тип 2):
- старая версия строки помечается как «историческая»;
- новая версия создаётся с актуальными данными и датами действия.
Выглядит страшно только на словах. На практике:
- в каждой dim-таблице немного объектов,
- изменения случаются не так часто,
- нагрузка на SCD-обновления невысокая.
Зато бизнес видит честную картину:
- как выглядел ассортимент год назад,
- какие бренды тогда были активны,
- какие цены были реально в тот период.
Airflow здесь нужен как «оркестратор, который не забудет»:
- сначала обновить измерения (SCD2),
- затем факты транзакций,
- затем витрины.
8. Что видит владелец бизнеса в итоге
После внедрения нормального ETL-движка и DWH у вас появляется не «таблица ради таблицы», а несколько очень конкретных эффектов:
- Один источник правды. Больше нет споров «в Excel одно, в личном кабинете другое, в отчёте директора третье». Все смотрят в одни и те же витрины.
- Прозрачная юнит-экономика. Можно честно посчитать: какой SKU в плюс, какой в минус, где маркетинг сжирает маржу, а где помогает.
- Контроль остатков и заказов. Можно видеть, где вы «висящие» товары, где опасность out-of-stock, где наоборот излишки на складах.
- Адекватная аналитика рекламы. Расходы, показы, клики, заказы и маржа оказываются в одной таблице, а не в пяти разных выгрузках.
- Понятная картина по каналам. Ozon, Wildberries, Яндекс.Маркет и другие источники складываются в общую картинку, а не живут отдельными мирками.
И главное — вы перестаёте зависеть от отдельных людей и их файлов. Система становится частью инфраструктуры, как склад или бухгалтерия.
9. Сколько реально нужен дата-инженер
Самый частый страх: «Сейчас мы залезем в эту историю с DWH, и потом нам всю жизнь придётся держать дорогого дата-инженера на фулл-тайм».
Мы считаем, что это неправильная постановка вопроса.
Идеальная картина выглядит так:
-
0–12 месяцев. Идёт активное внедрение:
- проектирование архитектуры,
- интеграции с маркетплейсами и внутренними системами,
- построение DWH,
- настройка Airflow и всех пайплайнов,
- первые витрины и отчёты.
Здесь действительно нужна плотная работа дата-инженера. Это инвестиционный этап.
-
После запуска. Система стабилизируется. Основные пайплайны работают, ошибки пойманы и обработаны, архитектура понятна.
Дальше объём задач резко падает:
- иногда подключить новый отчёт или API;
- доработать схему под новый продукт;
- оптимизировать тяжёлый запрос;
- адаптировать систему под рост бизнеса.
В большинстве случаев для компании с оборотом от 100 млн ₽ в год достаточно около 200 часов работы дата-инженера в год.
Это примерно полтора месяца плотной занятости, растянутых на двенадцать месяцев.
Остальное время:
- систему можно спокойно поддерживать силами аналитиков и тех, кто отвечает за отчётность,
- дата-инженер подключается по мере необходимости: для архитектурных решений и сложных изменений.
Важно честно проговорить это с самого начала:
цель хорошего DWH — не посадить к нему навечно отдельного человека, а сделать так, чтобы система жила с минимальными регулярными затратами.
10. Роль аналитиков: как экономить КАПЕКС и не зависеть от подрядчика
У многих компаний сейчас сильные аналитики. Они умеют:
- писать SQL;
- работать в BI-инструментах;
- понимать бизнес-вопросы.
Мы считаем неправильным строить систему, в которой аналитик ничего не может без дата-инженера.
Поэтому мы проектируем DWH и ETL так, чтобы:
- аналитик мог сам заводить новые витрины, не ломая архитектуру;
- типовые операции (новый KPI, дополнительный срез, фильтры) не требовали вмешательства дата-инженера;
- документация и схемы были понятны внутри компании.
Это экономия КАПЕКС и OPEX:
- вы платите за сложную работу архитектору/дата-инженеру,
- а дальнейшая эксплуатация обходится дешевле, потому что большую часть задач закрывают сотрудники, которые и так у вас в штате.
11. Для техдиров: как мы строим пайплайны в Airflow
Для техдиров. Немного конкретики.
DAG’и и переиспользуемые блоки
Мы стараемся, чтобы внутри DAG’ов:
- шаги были максимально типовыми;
- повторяющиеся куски логики оформлялись в общие функции и классы;
- конфигурация (какие отчёты тянуть, какие таблицы обновлять) жила отдельно от кода.
Так получается библиотека блоков:
- «забрать отчёт из Ozon»,
- «проверить лимиты API»,
- «загрузить в staging»,
- «обновить SCD2-измерение»,
- «пересчитать витрину».
DAG при этом становится не монолитом на 500 строк, а комбинацией понятных шагов.
Ошибки, лимиты и токены
Маркетплейсы любят:
- менять форматы отчётов;
- вводить новые типы операций;
- ограничивать число запросов в секунду.
Поэтому в DAG’ах мы:
- описываем retry-стратегии для разных типов ошибок;
- учитываем лимиты по API (например, не более N запросов в секунду);
- закладываем использование нескольких ключей с разными ролями, чтобы не блокировать аналитику.
Основной принцип: ошибка должна быть локализована (по конкретному шагу) и понятна (в логе написано, что именно не устроило API).
12. Наш опыт: что мы уже пережили за вас
Мы строили пайплайны для разных компаний, которые торгуют на маркетплейсах. В процессе:
- столкнулись с неполной документацией Ozon и Wildberries;
- ловили редкие ошибки в операциях, о которых в доках не было ни слова;
- разбирались с лимитами и особенностями отчётности;
- понимали, что сначала код пишется за несколько часов, а вот вычищать исключения можно целый месяц.
На этой базе мы:
- собрали набор типовых блоков и подходов для Airflow;
- сформировали архитектуру хранилища, которая хорошо живёт именно в e-commerce;
- привыкли проектировать систему так, чтобы через год она не требовала тотальной переделки.
13. Чек-лист для владельца бизнеса перед решением
Если вы сейчас думаете о своём DWH и ETL-движке, попробуйте ответить на несколько вопросов:
- Ваш оборот по маркетплейсам выше 100 млн ₽ в год? Если да — хранилище почти точно окупится.
- Сегодня у вас есть один источник правды по выручке, марже и остаткам? Или в компании несколько разных таблиц «с настоящими цифрами»?
- Вы можете открутить время назад и честно посмотреть, как выглядел ассортимент и цены год назад?
- Что происходит, если сотрудник, который ведёт вашу Excel-таблицу, уйдёт? Система останется или рухнет?
- Сколько людей и часов в месяц уходит на ручные выгрузки, своды, перепроверки?
Если на эти вопросы неприятно отвечать — вероятно, пора думать о нормальном DWH и движке для ETL.
Airflow — не единственный вариант. Но это разумный баланс между:
- контролем,
- прозрачностью,
- стоимостью владения.
Мы в Koveh Studio выбрали его как основной инструмент для оркестрации. И наша главная задача — не привязать вас к себе навечно, а так построить систему, чтобы через год она жила на 200 часов дата-инженера в год и усилиях ваших аналитиков.
Если после этого текста вы сможете прийти к любому подрядчику и задать правильные вопросы по DWH и Airflow — значит, мы свою задачу решили.
Текст записан на диктофон, улучшен через ChatGPT-5.1 и отредактирован Даниилом Ковехом.




