Обновление данных и Airflow в AW BI: Как поддерживать актуальность моделей в AW BI

Модель данных в AW BI - это основа для ваших аналитических отчетов и дашбордов. Чтобы ваша аналитика была актуальной, данные модели необходимо загрузить в хранилище системы.

Процесс загрузки (синхронизации) - это важный этап, который включает в себя сбор данных из различных источников, их преобразование согласно вашей бизнес-логике и загрузку в целевое хранилище ClickHouse.

План статьи:

  • Методы запуска загрузки данных

    • ручная загрузка
    • автоматическое обновление
    • по времени(неделя/cron-строка)
    • по задаче
  • Airflow: Принцип работы и роль в AW BI

    • Как Airflow управляет процессом.
    • Архитектура Airflow
    • Нюансы времени и расписаний
    • Мониторинг и отладка в Airflow

Методы запуска загрузки данных

AW BI предлагает два основных подхода к синхронизации: ручной запуск и автоматическое обновление.

1. Ручная загрузка данных (по требованию)

Вы можете запустить обновление модели в любой момент времени, нажав кнопку “Загрузить данные в хранилище”.

  • Версионирование: Каждый новый успешный ручной запуск создает новую таблицу в хранилище и удаляет самую старую версию, согласно параметру MODEL_SYNC_COUNT (количество хранимых версий). За счет версионирования происходит присвоение уникальных имен каждой версии модели.

2. Автоматическое обновление данных (по планировщику)

Настройки регулярного обновления доступны в разделе “Планировщик” в настройках модели. Для этого необходимо открыть панель “Настройки” в модели и перейти далее во вкладку “Планировщик”.


Вариант планирования Описание
На основе времени (Режим “Неделя”) Обновление по фиксированному расписанию (выбранные дни недели и время).
На основе времени (Режим “Cron-строка”) Для сложных и гибких расписаний. Используется Cron-выражение (например, */5 * * * * для запуска каждые 5 минут).
На основе задачи (По событию) Запуск модели происходит только после успешного завершения синхронизации всех выбранных вами зависимых моделей.

:gear: Airflow: сердце оркестрации и ключевые нюансы

За всеми процессами загрузки и обновления данных в AW обязательно стоит Apache Airflow - инструмент, являющийся золотым стандартом для оркестрации сложных рабочих процессов в дата-инжиниринге.

Для чего нужен Airflow в AW BI? image3

Airflow — это мощный инструмент, который делает интеграцию ETL-процессов в AW BI бесшовной и эффективной:

  1. Управление порядком: Обеспечивает выполнение шагов в строго правильной последовательности.
  2. Параллельность: Запускает независимые шаги одновременно.
  3. Обработка ошибок: Контролирует статусы задач и обеспечивает логику повторов.
  4. Автоматическая генерация кода: AW BI автоматически генерирует описание рабочего процесса (DAG) в коде Airflow при любом изменении модели (добавлении таблиц, логики) и записывает его. Это избавляет пользователя от необходимости писать код для оркестрации.
  5. Синхронность: Airflow работает асинхронно (на основе событий), что позволяет системе AW BI оставаться стабильной и не блокировать пользователя, пока происходят сложные фоновые процессы.

Как Airflow управляет процессом

Каждый процесс загрузки данных модели в AW BI является рабочим процессом Airflow, который называется DAG (Directed Acyclic Graph) — Ориентированный Ациклический Граф.

  • DAG — это ваша модель, представленная в виде схемы, где каждый узел (шаг) называется задачей (Task).

  • Задачи — это оболочки над Операторами, которые выполняют конкретные действия (например, Transform_Spark_SQL для трансформации, Push_to_clickhouse для записи в ClickHouse).

  • Python как «Клей»: Airflow написан на Python и использует его, чтобы связать все разнородные технологии, участвующие в процессе (базы данных, Spark, ML-модели).

  • Airflow использует концепцию слотов и ограничения на параллельность, чтобы «размазывать» нагрузку по времени. Это необходимо, чтобы избежать переполнения ресурсов (Out of Memory) при одновременном запуске множества сложных задач (например, 100 задач ночью). AW BI в целом использует Airflow не только для основной синхронизации данных, но и для вспомогательных операций.

:building_construction: Архитектура Airflow: кто чем управляет

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

Компонент Airflow Аналогия (Отдел Логистики) Роль в системе
Шедулер (Scheduler) Начальник отдела и Планировщик Сердце Airflow. Он постоянно сканирует все DAG’и, определяет, когда нужно запускать задачи (по расписанию или событию) и отслеживает их статус.
Веб-сервер (Webserver) Монитор руководителя Предоставляет пользовательский интерфейс (UI), где вы видите граф процессов, логи и статусы задач. Это «приборная панель» всей системы.
Исполнитель (Executor) Диспетчер задач Определяет, где и как будут выполняться задачи. Он берет задачу у Шедулера и помещает ее в очередь для Воркеров, контролируя доступные ресурсы (слоты).
Воркер (Worker) Рабочий персонал/Грузчики Фактически выполняет код. Воркер получает задачу от Диспетчера и запускает оператор (например, выполняет Python-скрипт или Spark-запрос).
База Метаданных (Metadata DB) Журнал учета и архив Хранит всю информацию о системе: историю запусков, статусы задач, расписания, настройки и переменные. Все компоненты обращаются к ней.

:key: Особенности отображения времени и расписаний

Airflow имеет специфическую логику работы с расписаниями, которую важно понимать:

1. Правило первого запуска

Первый запуск по расписанию всегда начинается раньше назначенного времени. Дело в том, что Airflow разбивает всю временную ось на интервалы согласно расписанию. После создания расписания система проверяет, когда был последний запуск, и если видит, что его не было, то сразу же выполняет его в конце первого же пропущенного интервала.

2. Время в карточке запуска

Когда у модели настроен планировщик, Airflow оперирует интервалами данных, а не фактическим временем запуска, поэтому важно различать несколько характеристик, которые можно встретить в интерфейсе Airflow

Время в Airflow UI Что означает Когда используется
Data Interval End Конец текущего интервала согласно установленному расписанию. Отображается как время запуска в Airflow, если у модели есть расписание (в том числе при ручном запуске).
Execution Date Фактическая дата ручного запуска. Используется в карточке, если у модели нет настроенного расписания.
Started и Ended Точное время начала и окончания выполнения процесса. Доступно в параметрах в карточке запуска. Это единственный способ увидеть действительное время работы.

:exclamation:Поэтому вполне логична такая ситуация, когда вы сделаете несколько ручных запусков, все они могут показать одинаковое время в поле “Data Interval End” - это будет время следующего планового интервала, а не фактическое время нажатия кнопки. Для точного отслеживания используйте параметры “Started” и “Ended”.

Настройка часового пояса

По умолчанию время в Airflow может быть установлено в UTC 0. Это может быть неудобно для мониторинга.

  • Настройка: Для того чтобы изменить часовой пояс на нужный (например, UTC +3), необходимо в конфигурационном файле AW BI (.env) изменить параметр SERVER_TIMEZONE.
  • Применение: После изменения параметра нужно перезапустить AW BI (docker compose up -d --force-recreate).

image15

3. Мониторинг и анализ процесса

AW BI позволяет детально отслеживать процесс загрузки через интерфейс Airflow и, говоря даже о визуальном представлении процесса, это можно сделать несколькими способами.


Отображение Для чего нужно
Виды состояний для таски Нужны для наглядного отображения статуса выполняемой таски в момент выполнения и различаются по статусу и цвету. Каждый столбец в левой части интерфейса представляет собой отдельный запуск модели (RunID). Мигающие/горящие квадратики на графе показывают текущее состояние задач:
:white_circle: none - пока отдыхает
:yellow_circle: scheduled - должна быть запущена, все зависимости выполнены
:white_circle: queued - ждет свободный воркер
:green_circle: running - работает
:green_circle: success - успешно завершилась
:red_circle: restarting - перезапустили
:orange_circle: failed - упала
:red_circle: skipped - пропущена
:orange_circle: upstream_failed - упала предыдущая таска, которая нам нужна
:yellow_circle: up_for_retry - упала, но будет перезапущена
:large_blue_circle: up_for_reschedule - сенсор будет перезапущен
deferred - отложена и ждет триггер
:white_circle: removed - удалена из дага после запуска
Граф (Graph View) Показывает зависимости между задачами. Вы видите, какая задача от какой зависит (например, Task A должна завершиться до Task B).
Диаграмма Ганта (Gantt View) Позволяет визуально оценить время выполнения каждой задачи, найти «узкие места» (долгое ожидание в статусе queued) и понять, как задачи выполнялись параллельно.

Отслеживание, отладка и другие возможности интерфейса

  • Где увидеть запущенные модели? Используйте путь Airflow UI → Browse → DAG Runs, чтобы посмотреть историю всех запусков (в том числе упавших).

  • Выгрузка логов: Часто возникает такая ситуация, что необходимо поделиться логами для диагностики ошибки. Это можно легко сделать в Airflow: нажмите на задачу (Task) и выберите Logs → Download для выгрузки полного файла логов.

  • Остановка DAG: Если процесс завис или находится в цикле повторов, откройте Граф, нажмите на задачу и выберите Mark state as failed. Это остановит текущую задачу и предотвратит дальнейшие запуски.

  • Добавление метки к запуску. Вы можете добавить метку к конкретному запуску (DAG Run), чтобы не забыть о внесенных изменениях,например: “Внесены принудительные изменения в модель, актуализация таблицы товаров”.

:bulb: Вспомогательные DAG’и

Внимательный пользователь системы при открытии списка всех DAG-ов системы может обратить внимание на необычное наименование некоторых из них. Например, model_104_tools. Все дело в том, что не все процессы AW BI, запускаемые Airflow, связаны только с регулярным обновлением данных.

model_N - Основной процесс синхронизации. Отвечает за сбор, преобразование и загрузку (обновление), а DAG-и c наименованием model_N_tools используются для сервисных (вспомогательных) операций. К таким можно отнести подсчет количества записей (при создании модели) или выполнение полного предпросмотра данных.

:exclamation: Практический нюанс при обновлении “На основе задачи”

При использовании планировщика “На основе задачи” (то есть, когда одна модель зависит от успешного завершения других) может возникнуть проблема с неполной загрузкой данных, даже если в Airflow все статусы визуально выглядят как зеленые.

Если у вас есть цепочка моделей (U1 и U2 → M), и вы запускаете вручную только одну из родительских моделей (U2), то внутреннее расписание Airflow для зависимой модели (M) может “сбиться”.

  • Ручной запуск U2 становится отдельным событием, но остальные события (например, плановый ночной запуск U1) не синхронизируются с ним.
  • В результате, когда наступает время запуска зависимой модели M, она может стартовать, читая данные из старых версий родительских моделей (U1), что приводит к неполному набору данных в конечной модели M.

Возможное решение:

Если вы запускаете вручную одну модель из цепочки, от которой зависит другая модель, то все остальные необходимые модели-предшественники в этой цепочке также должны быть запущены вручную последовательно. Это гарантирует, что зависимая модель M будет ожидать и читать данные из актуальных версий всех своих источников. Нагляднее данный кейс можно посмотреть на схеме ниже:

Заключение

Актуализация данных - это одна из ключевых задач при работе с данными. AW BI предлагает для этого гибкий набор стратегий обновления: от простого расписания до запуска на основе событий и готовности данных.

Благодаря бесшовной интеграции с Airflow, AW BI предоставляет не просто планировщик, а мощный оркестратор, позволяющий вам:

  1. Управлять сложными зависимостями.
  2. Использовать автоматическую генерацию кода.
  3. Вникать в мельчайшие детали на любом этапе синхронизации через логи и визуальное представление загрузки в Airflow.

Airflow обеспечивает выполнение сложных цепочек обработки данных (DAG) в правильном порядке, с учетом зависимостей, параллельности, контроля ресурсов и логики обработки ошибок, и все это AW BI делает во многом за вас.