feat(airflow): пульт стал world_init, добавлен DAG world_next_day (#4)
- Зачем:
- список DAG'ов должен читаться лесенкой ddl_init → world_init →
world_next_day, а путь менти — проходиться пустыми формами
(issue #4, спека редизайна пути менти, решения 2–3).
- Что:
- generator_control переименован в world_init, дефолт операции —
import; next-day ушёл из выпадашки в отдельный DAG;
- новый беспараметрный world_next_day: расписание */30 * * * *,
создаётся на паузе, catchup=False, max_active_runs=1; общие
задачи вынесены в airflow/dags/utils/startup_history_tasks.py;
- доки и контрактные тесты обновлены синхронно; быстрый старт
README — без make ddl, схему создаёт DAG ddl_init.
- Проверка:
- make test (210 + 31) и make lint зелёные;
- живая приёмка на чистом стенде: world_init пустой формой
импортировал эталонный мир за 217 с (3 дня, 280 437 событий),
world_next_day после снятия с паузы добавляет ровно один день
за прогон, дашборд Superset собирается.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -58,9 +58,9 @@ git add data/startup_history/reference-world.json.xz
|
||||
При импорте DAG дважды читает и распаковывает артефакт: во время предпроверки и
|
||||
перед записью в Kafka. Это увеличивает время импорта, но не меняет результат.
|
||||
|
||||
Менти в форме `generator_control` выбирает `import` и оставляет
|
||||
`artifact_path` пустым. Тогда читается эталонный мир из репозитория. Из консоли
|
||||
тот же импорт запускается без указания пути:
|
||||
Менти запускает `world_init` с пустой формой. Тогда читается эталонный мир из
|
||||
репозитория. Следующий модельный день добавляет отдельный беспараметрный DAG
|
||||
`world_next_day`. Из консоли тот же импорт запускается без указания пути:
|
||||
|
||||
```bash
|
||||
make startup-history-import
|
||||
@@ -68,20 +68,24 @@ make startup-history-import
|
||||
|
||||
## Пульт в Airflow
|
||||
|
||||
Основной ручной путь — DAG `generator_control` в Airflow UI:
|
||||
Основной учебный путь в Airflow UI:
|
||||
|
||||
1. Поднимите стенд: `make up`.
|
||||
2. Если DDL ещё не применён, запустите `ddl_init`.
|
||||
3. Снимите паузу с `etl_pipeline`, если он ещё paused:
|
||||
`docker compose exec -T airflow-webserver airflow dags unpause etl_pipeline`.
|
||||
4. Откройте `generator_control` и выберите `operation`.
|
||||
4. Запустите `world_init` с пустой формой. По умолчанию он импортирует эталонный мир.
|
||||
5. Когда нужен ещё один модельный день, запустите `world_next_day` с пустой формой.
|
||||
|
||||
Операции:
|
||||
`world_next_day` имеет расписание каждые 30 минут, но по умолчанию стоит на паузе.
|
||||
Не включайте расписание до внедрения накопительных счётчиков manifest.
|
||||
|
||||
## Операции сопровождающего
|
||||
|
||||
В форме `world_init` сопровождающему дополнительно доступны операции:
|
||||
|
||||
- `backfill` — создать стартовую историю. После записи в Kafka DAG сам запускает
|
||||
`etl_pipeline`, ждёт завершения и выполняет `check`.
|
||||
- `import` — прочитать артефакт из `artifact_path`. Несовместимый артефакт
|
||||
отклоняется до записи в Kafka.
|
||||
- `check` — сверить ClickHouse с manifest из Kafka.
|
||||
|
||||
Поля формы:
|
||||
|
||||
Reference in New Issue
Block a user