docs(generator): путеводитель по генератору и живой проход make demo
- Зачем:
- спека отвечает «почему», а жанра «как пройти устройство по коду»
не было (#48); черновик в generator/README.md ждал выверки.
- Что:
- новый набор docs/architecture/generator/: индекс с целевой картиной
и mermaid-схемой плюс шесть поддокументов по темам тикета.
- демо-модуль и цель make demo: канонический D0, все стадии цепочки
на одном экране; тест-сторож проверяет стадии без прибитых чисел.
- раздел «Как это работает» в generator/README.md сжат до ссылки
на путеводитель, черновая врезка снята.
- Проверка:
- из generator/: make lint, make typecheck, make test (430 passed),
make demo; два слепых ревью и узкая перепроверка — находки закрыты.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
33aef73d0e
commit
0c466c082e
11 files changed
+392
-26
No files matched your search
@@ -0,0 +1,40 @@
|
||||
# Время модельного дня
|
||||
|
||||
Этот документ отвечает на вопрос, почему дата модельных суток не обязана
|
||||
совпадать с UTC-датой события.
|
||||
|
||||
В коде встречаются три координаты времени:
|
||||
|
||||
- D — номер дня на оси модельного времени;
|
||||
- `EventDate` — дата D в поясе счетчика;
|
||||
- `UTCEventTime` — абсолютная метка события.
|
||||
|
||||
Местное время гостя задает форму активности внутри суток, а границу дня задает
|
||||
пояс счетчика.
|
||||
|
||||
[`world.ORIGIN`](../../../generator/src/clickstream_generator/world.py) — D0
|
||||
календарной оси: он переводит номер D в конкретную дату. Это не механизм
|
||||
часового пояса. Механизм —
|
||||
[`world.COUNTER_TIMEZONE_MINUTES`](../../../generator/src/clickstream_generator/world.py),
|
||||
смещение пояса счетчика от UTC.
|
||||
|
||||
В [`day._columns`](../../../generator/src/clickstream_generator/day.py)
|
||||
`EventDate` получается как `ORIGIN + D`. Чтобы получить абсолютную полночь
|
||||
тех же суток, код вычитает смещение счетчика, а затем прибавляет секунды
|
||||
события внутри дня. Поэтому сутки `2026-06-01` в UTC+4 начинаются в
|
||||
`2026-05-31 20:00:00Z`: у первых четырех часов
|
||||
`toDate(UTCEventTime) != EventDate`.
|
||||
|
||||
[`day._starts`](../../../generator/src/clickstream_generator/day.py) сначала
|
||||
выбирает час из городской строки весов, собранной
|
||||
[`day._hour_cumulative`](../../../generator/src/clickstream_generator/day.py),
|
||||
а затем равномерно выбирает секунду внутри часа. Строка поворачивает суточную
|
||||
волну на разницу между поясом гостя и поясом счетчика. Так вечерний пик гостя
|
||||
попадает в нужные часы внутри дня, но граница суток и `EventDate` остаются
|
||||
счетчиковыми.
|
||||
|
||||
Как часовой пояс меняет представление времени в ClickHouse, описано в разделе
|
||||
«Часовые пояса» [документа о хранилище](../storage.md). Типы и публичный смысл
|
||||
полей записаны в [описании события](../../formats/clickstream-event.md).
|
||||
Основание модели времени записано в [спеке
|
||||
генератора](../../specs/2026-08-01-generator.md), раздел 9.
|
||||
Reference in new issue
Block a user