Зачем: владелец прочел главы и нашел неестественные фразы: дашборды «спрашивают», даги «двигают ось», заказ «ездит в слепках», Superset — «витрины глазами», объекты «приезжают из файлов». Читателю такие образы надо расшифровывать, а урок в них не прячется. Что: в четырех главах олицетворения заменены прямыми формулировками, «позиция мира» и «шаговый даг» раскрыты через world_position и имена дагов, паспорт мира описан по составу и назначению, окно слепка заказов объяснено словами, режимы генератора и правило импорта Superset сказаны прямо. Тире и стрелки оставлены: это домашний стиль. Проверка: проверки тикета #220 на битые ссылки и запретные слова пусты, строки прозы не длиннее 80 знаков, git diff --check чист. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
63 lines
4.1 KiB
Markdown
63 lines
4.1 KiB
Markdown
# Генератор: откуда берутся данные
|
|
|
|
Генератор изображает две системы интернет-магазина. Первая — счетчик на сайте,
|
|
он шлет события в топик `hits`. Вторая — бэкенд магазина, он раз в модельные
|
|
сутки выгружает слепок заказов в топик `orders`.
|
|
|
|
## Что он производит
|
|
|
|
Событие — широкая строка по образцу выгрузки Яндекс Метрики. Генератор создает
|
|
три вида событий: просмотр страницы, корзину и покупку. Все колонки перечислены
|
|
в [описании выгрузки](../formats/clickstream-event.md).
|
|
|
|
Заказ — та же покупка, но записанная бэкендом магазина, с суммами в деньгах.
|
|
Семь модельных дней после оформления заказ еще может измениться, поэтому каждый
|
|
дневной слепок несет заказы за последние семь дней в их текущем состоянии.
|
|
Устройство и форма слепка разобраны в [отдельном
|
|
справочнике](../architecture/orders/snapshot.md).
|
|
|
|
## Почему данные всегда одни и те же
|
|
|
|
Генератор не берет случайность извне. Все его случайные решения выводятся из
|
|
[зерна](../architecture/generator/seeds.md) — одного числа в настройках — и из
|
|
номера дня. То же зерно и тот же номер дня дают ровно те же события, поэтому
|
|
стартовый мир одинаков при каждом `make up`.
|
|
|
|
Рядом лежит паспорт мира, `data/world-inventory.json`: зерно, версия генератора
|
|
и по строке на каждый день с числом событий и контрольной суммой. По нему
|
|
проверяют, что генератор собрал тот же мир, что и раньше, и что в ODS все
|
|
доехало без потерь. Паспорт описывает только восемь дней стартового мира.
|
|
|
|
## Кто его запускает
|
|
|
|
На стенде генератором управляют [даги модельного
|
|
времени](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): числа совпадут. Дни, сыгранные после
|
|
стартового мира, в паспорте не записаны. Так и задумано.
|
|
|
|
## Куда дальше
|
|
|
|
Подробнее генератор разобран в [README папки
|
|
`generator/`](../../generator/README.md) и в [справочнике его
|
|
устройства](../architecture/generator/README.md). На этом путеводитель
|
|
заканчивается: дальше справочники и [учебные задания](../labs/README.md).
|