Files
clickstream-data-platform/generator
ddadmin bb8605eed7 feat(labs): добавлено сохранение наблюдений под учебной учеткой
Зачем: студенту нужен понятный путь от сохраненного состояния к SQL-сравнению без доступа технической учетной записи к изменению хранилища.

Что: добавлен student с чтением источников и записью только в default; лабораторная сохраняет заказы и итоги в две локальные таблицы. Обновлены настройка доступа и программа, уточнено округление productPrice.

Проверка: DDL и INSERT SELECT под student, пустое наблюдение, восемь переходов сохраненной истории и запрет вставки в пять прикладных баз на обеих нодах. config-test, lint стенда и генератора, 54 ссылки, независимое ревью.
2026-09-22 04:56:45 -04:00
..

Генератор событий и заказов

Генератор создает данные двух источников интернет-магазина. Счетчик сайта отправляет в топик Kafka hits события: просмотр страницы, добавление товара в корзину и покупку. Серверная часть магазина выгружает в orders дневной слепок — состояние заказов, оформленных за последние семь модельных дней. Оба источника работают; хранилище принимает события непрерывно, заказы — по команде Airflow.

Событие описывает отдельное действие посетителя. Заказ после оформления может измениться, например перейти в статус paid или cancelled. Поэтому один order_id встречается в нескольких слепках. Часть заказов впервые появляется с задержкой в один или два дня; конец семидневного окна от этого не сдвигается. Правила изменений и задержек — в описании судьбы заказа.

Слепок снимается на конец модельного дня и отправляется на следующий день. Команда snapshot --day 1 отправляет слепок дня 0, а snapshot --day 0 не отправляет ничего: до начала модели заказов нет. События и слепки отправляются отдельными запусками генератора.

Как это работает

Зерно генерации задает случайные выборы: какие посетители придут, какие страницы откроют и что купят. При неизменных коде, каталоге и настройках одинаковые зерно и номер дня дают одинаковые данные. День можно рассчитать без генерации всех предыдущих дней.

Сначала рассчитываются посещения и покупки. Из покупки получаются событие purchase со стороны сайта и заказ со стороны магазина. Номер связывает их: purchaseID в событии соответствует order_id заказа. Суммы могут различаться: магазин учитывает скидку, доставку и удаленные позиции. Деньги генератор считает целыми копейками; в JSON заказа это строки в рублях с двумя знаками после точки, например "1289.99".

Готовые записи превращаются в JSON и отправляются в файл или Kafka: одна запись занимает одну строку файла или одно сообщение. Событие содержит 47 полей по описанию выгрузки, запись заказа — поля формата слепка. Подробное устройство генератора разобрано в техническом справочнике.

Что где лежит

Все перечисленные модули находятся в src/clickstream_generator/.

Модули Назначение
world.py, seeds.py, plan.py Настройки мира, случайные выборы и план посещений
reference.py, catalog.py Устройства, города, источники трафика и каталог товаров
day.py, commerce.py Визиты, события сайта и покупки
orders.py Состояние заказов на дату слепка, изменения и задержки
serialize.py, player.py, sinks.py Запись JSON и отправка в файл или Kafka
cli.py Команды и параметры запуска
schema.py, schema_doc.py Описания колонок события и сборка документа выгрузки
inventory.py Сборка паспорта мира с контрольными суммами и счетчиками

Тесты в tests/ проверяют формат, правила модели и повторяемость данных. Описание выгрузки и паспорт мира собираются из кода; вручную их не редактируют.

Команды

Для запуска из каталога generator/ используйте uv run python -m clickstream_generator <команда>. Справку можно открыть через --help, в том числе после имени команды.

Команда Что отправляет Особые параметры
batch События дня без пауз --limit N ограничивает число событий за весь запуск
live События постепенно, с ускорением --speed X, по умолчанию 60: сутки занимают около 24 минут
snapshot Слепок заказов предыдущего дня --day D задает день отправки

Для всех команд нужны номер дня --day и приемник: --file либо --brokers вместе с --topic. Общие параметры --seed и --days задают зерно и число последовательных дней. Параметры можно передать и через окружение; имена и примеры собраны в справочнике запуска. Прямой запуск генератора не продвигает сохраненную позицию времени стенда — ей управляют даги модельного времени.

Из каталога generator/ доступны:

  • make test — тесты генератора;
  • make lint — проверка кода и форматирования через ruff;
  • make typecheck — проверка типов через ty;
  • make demo — показать стадии расчета первого дня, D0;
  • make docs — пересобрать описание выгрузки;
  • make inventory — пересобрать паспорт мира.

В корне make lint проверяет даги, код Superset и сборку карты архитектуры. Корневые make generate-batch и make generate-live запускают события через контейнер генератора. Состав проверок — в карте проверок. Python и зависимости запускаются через uv; версии закреплены в uv.lock.