Зачем: начинающим ученикам трудно читать главы без пояснений терминов и ожидаемого результата примеров. Что: уточнены заголовки и объяснения в пяти главах и вводной, добавлена сверка графика с SQL, обновлены ссылки из заданий и документации генератора. Проверка: SQL и команды сохранены, локальные ссылки проверены; git diff --check пройден. Ревью смысла Sol 6.1 high замечаний не выявило, новые пояснения дополнительно сверены с кодом и настройками.
71 lines
4.9 KiB
Markdown
71 lines
4.9 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#как-запустить-генератор).
|
||
|
||
У генератора два режима. Пакетный отправляет все события дня без пауз.
|
||
В живом режиме события поступают постепенно, как в работающем магазине,
|
||
но время идет ускоренно: модельные сутки занимают около 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).
|