# Генератор: откуда берутся данные Генератор имитирует работу двух систем интернет-магазина. Счетчик на сайте отправляет записи о действиях посетителей в топик `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#как-запустить-генератор). У генератора два режима. Пакетный отправляет все события дня без пауз. В живом режиме события поступают постепенно, как в работающем магазине, но время идет ускоренно: модельные сутки занимают около 24 минут. ## Сверка с паспортом мира Подключитесь из DBeaver по [инструкции](../../README.md#подключиться-из-dbeaver) и выполните запрос: ```sql SELECT EventDate, count() AS events FROM ods.event_v GROUP BY EventDate ORDER BY EventDate; ``` Сравните число событий за каждый из первых восьми дней со значением `events` за ту же дату в [паспорте мира](../../data/world-inventory.json). Числа должны совпасть. Если вы уже генерировали следующие дни, в результате запроса будут дополнительные даты; в паспорте их нет. ## Учебные задания и справочники Подробнее генератор разобран в [README папки `generator/`](../../generator/README.md) и в [справочнике его устройства](../architecture/generator/README.md). Теперь можно переходить к [учебным заданиям](../labs/README.md).