docs(handbook): написаны четыре главы путеводителя

Зачем: после главы о хранилище путеводитель обещал еще четыре главы, а
вместо них стояли заглушки «Пока главы нет…». Без них читатель не видит,
кто двигает мир и раскладывает данные по слоям, куда смотреть в Grafana,
как витрина становится графиком и откуда берутся данные.

Что: docs/handbook/airflow-dags.md, monitoring.md, superset.md,
generator.md — по скелетам тикета #220, форма — как у главы о хранилище.
Сквозная линия трех глав: ход мира на день D везет слепок заказов дня D−1,
поэтому выручка всегда на день позади кликстрима. README путеводителя
ведет заголовками в файлы глав, заглушки убраны; «Куда дальше» главы о
хранилище ведет прямо в главу об Airflow.

Проверка: три SELECT из глав прогнаны на живом стенде от analyst — трафик
получил сыгранный день, выручка только предыдущий, счетчики первых восьми
дней совпали с паспортом мира. Скрипт проверки ссылок и запретных слов из
тикета пуст. Постановка отревьюена Opus (18 находок внесены); главы прошли
саморевью Sol и два слепых ревью Opus — факты и проза (ai-text-lint плюс
оптика литературного русского): 25 находок внесены, 1 отклонена.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
ddadminandClaude Fable 5.1 committed 2026-09-02 17:14:43 -04:00
1 parent b15d5253ee
commit ac21399fe4
6 files changed
+306 -16

No files matched your search

+57
View File
@@ -0,0 +1,57 @@
# Генератор: откуда берутся данные
Генератор притворяется двумя системами магазина. Счетчик сайта шлет события в
топик `hits`. Бэкенд раз в модельные сутки выгружает слепок заказов в топик
`orders`.
## Что он производит
Событие — широкая строка по образцу выгрузки Яндекс Метрики. Генератор создает
три вида событий: просмотр страницы, корзину и покупку. Все колонки перечислены
в [описании выгрузки](../formats/clickstream-event.md).
Заказ — вторая проекция той же покупки, с деньгами магазина. Заказ ездит в
слепках, пока может измениться, — семь модельных дней. Устройство и форму слепка
разбирает [отдельный справочник](../architecture/orders/snapshot.md).
## Почему данные всегда одни и те же
Модельный день зависит от [зерна](../architecture/generator/seeds.md) — числа,
из которого генератор разворачивает всю свою случайность, — и от номера дня.
Одна и та же пара дает те же события, поэтому стартовый мир одинаков при каждом
`make up`.
Паспорт `data/world-inventory.json` отвечает на один вопрос: тот ли это мир. Он
охватывает только восемь дней стартового мира.
## Кто его запускает
На стенде генератором управляют [даги модельного
времени](airflow-dags.md#даги-мира). Его можно запустить и напрямую. Команды
собраны в [справочнике мира](../architecture/world.md#как-запустить-генератор).
У генератора два режима. Пакетный отправляет день пачкой. Живой проигрывает
модельные сутки в ускоренном темпе.
## Посмотрите сами
Подключитесь из DBeaver по [инструкции](../../README.md#подключиться-из-dbeaver)
и выполните запрос:
```sql
SELECT EventDate, count() AS events
FROM ods.event_v
GROUP BY EventDate
ORDER BY EventDate;
```
Сравните первые восемь дней с восемью строками в [паспорте
мира](../../data/world-inventory.json): числа совпадут. Дни, сыгранные после
стартового мира, в паспорте не записаны. Это ожидаемо.
## Куда дальше
Глубже генератор разобран в [`generator/`](../../generator/README.md) и в
[справочнике его устройства](../architecture/generator/README.md). Тропа
путеводителя закончена: дальше идут справочники и [учебные
задания](../labs/README.md).