22 December 2025

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

airflow_article2.png

Эта статья для владельцев бизнеса, директоров e-commerce и техдиров, которые торгуют на маркетплейсах и думают о своём хранилище данных.

Мы работаем с компаниями, у которых суммарный оборот по маркетплейсам от 100 млн ₽ в год. Ниже этой планки, честно сказать, полноценный DWH редко окупается. Выше — уже больно жить в Excel, выгрузках из кабинета и «сводной табличке, которую делает Вася».

В этой статье объясню, что происходит внутри ETL-движка, зачем вообще нужен Airflow, чем он отличается от простого cron и почему дата-инженер не должен сидеть у вас в штате фулл-тайм годами.

1. Зачем вообще нужен отдельный движок для ETL

Чтобы хранилище данных работало, нужно каждый день делать три простые вещи:

  1. Забрать данные из источников: Ozon, Wildberries, Яндекс.Маркет, реклама, внутренняя бухгалтерия/ERP.
  2. Привести их в порядок: почистить, разложить по таблицам, связать между собой.
  3. Сложить в 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 и прочие крупные платформы

У них есть плюсы:

  • удобный интерфейс,
  • куча интеграций,
  • готовые коннекторы.

Но есть три «но»:

  1. Цена. Для оборота 100–500 млн ₽ в год это часто слишком тяжёлая пушка. Подписка, лицензии, консалтинг — счёт идёт на десятки и сотни тысяч евро в год.
  2. Юрисдикция и доступность. Часть решений недоступна для компаний, связанных с Россией. Ограничения, санкции, вопросы комплаенса.
  3. Избыточность. Вам не нужен 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)

В хранилище маркетплейсов есть два типа таблиц:

  1. Измерения (dim). Товары, бренды, категории, склады, партнёры.
  2. Факты (fact). Транзакции, остатки, цены, рекламные показы/клики/расходы.

У измерений есть неприятная особенность: всё постоянно меняется.

  • название товара правят маркетологи;
  • карточка переезжает в другую категорию;
  • меняется бренд, упаковка, поставщик.

Если просто переписывать данные «поверх», вы теряете историю: почему в отчёте за прошлый год товар уже называется по-новому.

Поэтому мы используем SCD-2 (slowly changing dimensions, тип 2):

  • старая версия строки помечается как «историческая»;
  • новая версия создаётся с актуальными данными и датами действия.

Выглядит страшно только на словах. На практике:

  • в каждой dim-таблице немного объектов,
  • изменения случаются не так часто,
  • нагрузка на SCD-обновления невысокая.

Зато бизнес видит честную картину:

  • как выглядел ассортимент год назад,
  • какие бренды тогда были активны,
  • какие цены были реально в тот период.

Airflow здесь нужен как «оркестратор, который не забудет»:

  • сначала обновить измерения (SCD2),
  • затем факты транзакций,
  • затем витрины.

8. Что видит владелец бизнеса в итоге

После внедрения нормального ETL-движка и DWH у вас появляется не «таблица ради таблицы», а несколько очень конкретных эффектов:

  1. Один источник правды. Больше нет споров «в Excel одно, в личном кабинете другое, в отчёте директора третье». Все смотрят в одни и те же витрины.
  2. Прозрачная юнит-экономика. Можно честно посчитать: какой SKU в плюс, какой в минус, где маркетинг сжирает маржу, а где помогает.
  3. Контроль остатков и заказов. Можно видеть, где вы «висящие» товары, где опасность out-of-stock, где наоборот излишки на складах.
  4. Адекватная аналитика рекламы. Расходы, показы, клики, заказы и маржа оказываются в одной таблице, а не в пяти разных выгрузках.
  5. Понятная картина по каналам. Ozon, Wildberries, Яндекс.Маркет и другие источники складываются в общую картинку, а не живут отдельными мирками.

И главное — вы перестаёте зависеть от отдельных людей и их файлов. Система становится частью инфраструктуры, как склад или бухгалтерия.

9. Сколько реально нужен дата-инженер

Самый частый страх: «Сейчас мы залезем в эту историю с DWH, и потом нам всю жизнь придётся держать дорогого дата-инженера на фулл-тайм».

Мы считаем, что это неправильная постановка вопроса.

Идеальная картина выглядит так:

  1. 0–12 месяцев. Идёт активное внедрение:

    • проектирование архитектуры,
    • интеграции с маркетплейсами и внутренними системами,
    • построение DWH,
    • настройка Airflow и всех пайплайнов,
    • первые витрины и отчёты.

    Здесь действительно нужна плотная работа дата-инженера. Это инвестиционный этап.

  2. После запуска. Система стабилизируется. Основные пайплайны работают, ошибки пойманы и обработаны, архитектура понятна.

    Дальше объём задач резко падает:

    • иногда подключить новый отчёт или 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-движке, попробуйте ответить на несколько вопросов:

  1. Ваш оборот по маркетплейсам выше 100 млн ₽ в год? Если да — хранилище почти точно окупится.
  2. Сегодня у вас есть один источник правды по выручке, марже и остаткам? Или в компании несколько разных таблиц «с настоящими цифрами»?
  3. Вы можете открутить время назад и честно посмотреть, как выглядел ассортимент и цены год назад?
  4. Что происходит, если сотрудник, который ведёт вашу Excel-таблицу, уйдёт? Система останется или рухнет?
  5. Сколько людей и часов в месяц уходит на ручные выгрузки, своды, перепроверки?

Если на эти вопросы неприятно отвечать — вероятно, пора думать о нормальном DWH и движке для ETL.

Airflow — не единственный вариант. Но это разумный баланс между:

  • контролем,
  • прозрачностью,
  • стоимостью владения.

Мы в Koveh Studio выбрали его как основной инструмент для оркестрации. И наша главная задача — не привязать вас к себе навечно, а так построить систему, чтобы через год она жила на 200 часов дата-инженера в год и усилиях ваших аналитиков.

Если после этого текста вы сможете прийти к любому подрядчику и задать правильные вопросы по DWH и Airflow — значит, мы свою задачу решили.

Текст записан на диктофон, улучшен через ChatGPT-5.1 и отредактирован Даниилом Ковехом.

Daniil Kovekh
Daniil Kovekh
Data & Full Stack Engineer