# Генератор: откуда берутся данные Генератор изображает две системы интернет-магазина. Первая — счетчик на сайте, он шлет события в топик `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).