feat(generator): эталонный мир в git и import по умолчанию
- Зачем:
- менти собирал мир генерацией (минуты и десятки минут CPU); теперь
готовый трёхдневный мир загружается импортом за ~2 минуты, и числа
у всех менти совпадают число-в-число (issue #3).
- Что:
- артефакт data/startup_history/reference-world.json.xz в git:
3 модельных дня daily-wave, ~850 МБ JSON → 32 МБ xz;
- чтение и запись артефакта понимают .xz потоково (lzma); пустое поле
artifact_path в пульте и make startup-history-import читают эталон;
- длительность профиля daily-wave стала 3d — в тон эталонному миру;
- предпроверка чистого стенда ставит зависимости генератора через uv;
экспорт и импорт разведены отдельными переменными Makefile;
- доки и runbook обновлены; новые контрактные тесты: xz round-trip
и дефолтные пути артефакта.
- Проверка:
- make test (210 + 31) и make lint зелёные; импорт на чистом стенде
за 2м03с, manifest совпал (280437 событий), Superset-проверка
зелёная; независимое ревью — APPROVED.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -29,11 +29,43 @@
|
||||
| Профиль | Для чего | Длительность | Live-ход |
|
||||
|---------|----------|--------------|----------|
|
||||
| `ci` | Быстрая проверка и CI | `6h` | ×1, тик 60 с |
|
||||
| `daily-wave` | История с видимой суточной волной | `2d` | ×60, тик 1 с |
|
||||
| `daily-wave` | История с видимой суточной волной | `3d` | ×60, тик 1 с |
|
||||
|
||||
Длительность можно переопределить через `GEN_HISTORY_DURATION`, например `2d`.
|
||||
Команда сама считает `GEN_MODEL_T_END` от `GEN_MODEL_T0`.
|
||||
|
||||
## Эталонный мир
|
||||
|
||||
В репозитории хранится готовый мир за три модельных дня:
|
||||
`data/startup_history/reference-world.json.xz`. Это обычный JSON-артефакт,
|
||||
сжатый xz. Его добавляют прямо в Git, без Git LFS.
|
||||
|
||||
Сопровождающий проекта собирает файл одним запуском из корня репозитория:
|
||||
|
||||
```bash
|
||||
ARTIFACT="$PWD/data/startup_history/reference-world.json.xz" \
|
||||
make startup-history-export
|
||||
```
|
||||
|
||||
Команда выполняет backfill с профилем `daily-wave` и сразу пишет xz-файл.
|
||||
Несжатый JSON занимает около 850 МБ, сжатый файл — около 32 МБ. После проверки
|
||||
файл можно добавить обычной командой:
|
||||
|
||||
```bash
|
||||
git add data/startup_history/reference-world.json.xz
|
||||
```
|
||||
|
||||
При импорте DAG дважды читает и распаковывает артефакт: во время предпроверки и
|
||||
перед записью в Kafka. Это увеличивает время импорта, но не меняет результат.
|
||||
|
||||
Менти в форме `generator_control` выбирает `import` и оставляет
|
||||
`artifact_path` пустым. Тогда читается эталонный мир из репозитория. Из консоли
|
||||
тот же импорт запускается без указания пути:
|
||||
|
||||
```bash
|
||||
make startup-history-import
|
||||
```
|
||||
|
||||
## Пульт в Airflow
|
||||
|
||||
Основной ручной путь — DAG `generator_control` в Airflow UI:
|
||||
@@ -58,7 +90,8 @@
|
||||
- `duration` можно оставить пустым, тогда берётся длительность профиля.
|
||||
- `seed` и `model_time_speed` — необязательные переопределения мира.
|
||||
- `artifact_path`: для `backfill` — куда сохранить файл; пусто — не сохранять.
|
||||
Для `import` — что читать; пусто — `/opt/airflow/data/startup-history-import.json`.
|
||||
Для `import` — что читать; пусто — эталонный мир из репозитория:
|
||||
`/opt/airflow/data/startup_history/reference-world.json.xz`.
|
||||
|
||||
Backfill и import работают только на чистом стенде. Если Kafka-топики данных или
|
||||
STG уже непустые, DAG упадёт до записи и подскажет `make clean`. Консольные
|
||||
@@ -79,7 +112,7 @@ STG уже непустые, DAG упадёт до записи и подска
|
||||
|
||||
## Экспорт
|
||||
|
||||
По умолчанию создаётся двухсуточный артефакт `daily-wave` с суточной волной:
|
||||
По умолчанию создаётся трёхсуточный артефакт `daily-wave` с суточной волной:
|
||||
|
||||
```bash
|
||||
make startup-history-export
|
||||
@@ -104,11 +137,11 @@ make clean
|
||||
docker compose up -d clickhouse kafka
|
||||
make ddl
|
||||
|
||||
ARTIFACT=/tmp/clickstream-startup-history.json make startup-history-import
|
||||
make startup-history-import
|
||||
|
||||
sleep 10
|
||||
make transform
|
||||
ARTIFACT=/tmp/clickstream-startup-history.json make startup-history-check
|
||||
ARTIFACT=data/startup_history/reference-world.json.xz make startup-history-check
|
||||
CHECK_LIVE_SEAM=0 make generated-history-check
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user