Глава «Хранилище и его слои»: раздел DDS о сессии и третий пример #234

Closed
opened 2026-09-06 17:44:36 +03:00 by ddmitry · 1 comment
Owner

Part of #206

Цель

Дописать раздел «DDS: язык бизнеса» главы путеводителя docs/handbook/storage-layers.md так, чтобы он отвечал на то, за чем туда отправляют ТЗ ступени 3 (docs/labs/3-1-sessions-by-hand.md) и будущее ТЗ ступени 4: что такое визит на стенде, почему стенд считает сессию сам, хотя в событии уже есть VisitID, и где готовая сессия живет. Сейчас раздел дает о сессии одно предложение, а примеры «Посмотрите сами» сессию не показывают.

Чему научится читатель: сессия — расчетная сущность с договоренностью о границах, а не поле источника; ее можно посчитать иначе и разойтись с эталоном.

Решения, принятые здесь

Это вкусовая часть; исполнитель их не пересматривает.

Объем — от 8 до 12 строк прозы в разделе DDS плюс третий пример в «Посмотрите сами». Глава остается главой о слоях: сессия получает абзац-два, не свой раздел.

Содержание абзаца о сессии (факты из docs/architecture/dds/session.md и CONTEXT.md, статья «Визит»):

  • визит по договоренности стенда: подряд идущие события одной куки без пауз дольше 30 минут, не пересекающие границу модельных суток; «сессия» — то же понятие словами аналитика;
  • почему считаем сами: в бою визиты режет Метрика и отдает готовый VisitID прямо в хитах; стенд играет роль Метрики и считает сессии сам, а VisitID из события оставляет эталоном для самопроверки — иначе сборка сессии свелась бы к группировке по чужому полю;
  • идентификатор сессии чеканит стенд, session_id; готовые сессии читают через dds.session_v, в договоре события dds.event_v поля VisitID нет намеренно.
    Подавать как выбор с доводом, без «правило», «нельзя», «обязательно». Ни слова о том, как именно устроена нарезка (окна, хеш, партиции): это материал ступени 4 и справочника.

Третий пример в «Посмотрите сами» — сессии одного модельного дня, той же даты 2026-06-01, что первые два:

SELECT
    client_id,
    started_at,
    finished_at,
    events_total,
    pageviews,
    purchases,
    entry_url
FROM dds.session_v
WHERE session_date = '2026-06-01'
ORDER BY events_total DESC
LIMIT 20;

Вводная фраза к нему — одно предложение: покажет сессии дня, собранные стендом из событий первого запроса. Заключительная фраза раздела («Оба запроса читают поверхности _v…») переписывается на три запроса: источник, расчетная сущность, готовый ответ витрины.

Ничего больше в главе не меняется: остальные разделы, таблица ключей, «Куда дальше» — как есть. Ссылка из ТЗ ступени 3 остается на тот же якорь #dds-язык-бизнеса.

Язык. Как во всей главе: «вы» строчными, без «ё», без «менти», короткие фразы, без олицетворений и калек. Термины: кука, визит, сессия, эталон, модельные сутки.

Границы

  • Правится только docs/handbook/storage-layers.md.
  • Не трогать ТЗ, справочники, CONTEXT.md, SQL стенда.

Сначала прочитать

  • docs/handbook/storage-layers.md — целиком, форма и тон.
  • docs/architecture/dds/session.md — вводный абзац, «Зерно», «Идентификатор» (факты).
  • CONTEXT.md, статьи «Визит» и «Граница суток».
  • docs/labs/3-1-sessions-by-hand.md — за чем ТЗ отправляет в главу.

Проверка

  • make lint в корне.
  • Третий запрос выполнен на стенде и возвращает строки за 2026-06-01.

Приемка

  • раздел DDS называет договоренность о визите, довод «почему считаем сами» и dds.session_v;
  • устройство нарезки (окна, хеш, партиции) не раскрыто;
  • третий пример в «Посмотрите сами» добавлен, заключительная фраза про три запроса;
  • остальная глава не изменена; слов-законов нет; make lint зеленый.
Part of #206 ## Цель Дописать раздел «DDS: язык бизнеса» главы путеводителя `docs/handbook/storage-layers.md` так, чтобы он отвечал на то, за чем туда отправляют ТЗ ступени 3 (`docs/labs/3-1-sessions-by-hand.md`) и будущее ТЗ ступени 4: что такое визит на стенде, почему стенд считает сессию сам, хотя в событии уже есть `VisitID`, и где готовая сессия живет. Сейчас раздел дает о сессии одно предложение, а примеры «Посмотрите сами» сессию не показывают. Чему научится читатель: сессия — расчетная сущность с договоренностью о границах, а не поле источника; ее можно посчитать иначе и разойтись с эталоном. ## Решения, принятые здесь Это вкусовая часть; исполнитель их не пересматривает. **Объем — от 8 до 12 строк прозы в разделе DDS плюс третий пример в «Посмотрите сами».** Глава остается главой о слоях: сессия получает абзац-два, не свой раздел. **Содержание абзаца о сессии** (факты из `docs/architecture/dds/session.md` и `CONTEXT.md`, статья «Визит»): - визит по договоренности стенда: подряд идущие события одной куки без пауз дольше 30 минут, не пересекающие границу модельных суток; «сессия» — то же понятие словами аналитика; - почему считаем сами: в бою визиты режет Метрика и отдает готовый `VisitID` прямо в хитах; стенд играет роль Метрики и считает сессии сам, а `VisitID` из события оставляет эталоном для самопроверки — иначе сборка сессии свелась бы к группировке по чужому полю; - идентификатор сессии чеканит стенд, `session_id`; готовые сессии читают через `dds.session_v`, в договоре события `dds.event_v` поля `VisitID` нет намеренно. Подавать как выбор с доводом, без «правило», «нельзя», «обязательно». Ни слова о том, как именно устроена нарезка (окна, хеш, партиции): это материал ступени 4 и справочника. **Третий пример в «Посмотрите сами»** — сессии одного модельного дня, той же даты `2026-06-01`, что первые два: ```sql SELECT client_id, started_at, finished_at, events_total, pageviews, purchases, entry_url FROM dds.session_v WHERE session_date = '2026-06-01' ORDER BY events_total DESC LIMIT 20; ``` Вводная фраза к нему — одно предложение: покажет сессии дня, собранные стендом из событий первого запроса. Заключительная фраза раздела («Оба запроса читают поверхности `_v`…») переписывается на три запроса: источник, расчетная сущность, готовый ответ витрины. **Ничего больше в главе не меняется**: остальные разделы, таблица ключей, «Куда дальше» — как есть. Ссылка из ТЗ ступени 3 остается на тот же якорь `#dds-язык-бизнеса`. **Язык.** Как во всей главе: «вы» строчными, без «ё», без «менти», короткие фразы, без олицетворений и калек. Термины: кука, визит, сессия, эталон, модельные сутки. ## Границы - Правится только `docs/handbook/storage-layers.md`. - Не трогать ТЗ, справочники, `CONTEXT.md`, SQL стенда. ## Сначала прочитать - `docs/handbook/storage-layers.md` — целиком, форма и тон. - `docs/architecture/dds/session.md` — вводный абзац, «Зерно», «Идентификатор» (факты). - `CONTEXT.md`, статьи «Визит» и «Граница суток». - `docs/labs/3-1-sessions-by-hand.md` — за чем ТЗ отправляет в главу. ## Проверка - `make lint` в корне. - Третий запрос выполнен на стенде и возвращает строки за `2026-06-01`. ## Приемка - [x] раздел DDS называет договоренность о визите, довод «почему считаем сами» и `dds.session_v`; - [x] устройство нарезки (окна, хеш, партиции) не раскрыто; - [x] третий пример в «Посмотрите сами» добавлен, заключительная фраза про три запроса; - [x] остальная глава не изменена; слов-законов нет; `make lint` зеленый.
ddmitry added the wayfinder:task label 2026-09-06 17:44:50 +03:00
ddmitry self-assigned this 2026-09-06 17:44:51 +03:00
Author
Owner

Резолюция

Сделано в PR #235 (ветка 234-dds-chapter), слияние закроет тикет.

Что остается:

  • Раздел «DDS: язык бизнеса» главы docs/handbook/storage-layers.md вырос с 6 до 13 строк: договоренность о визите (кука, пауза дольше 30 минут, граница модельных суток; аналитик зовет визит сессией), довод «почему сами» (в бою визиты режет Метрика и отдает VisitID в событиях; стенд играет ее роль, VisitID остается эталоном, иначе сборка свелась бы к группировке по чужому полю), session_id чеканит стенд, читать через dds.session_v, в dds.event_v поля VisitID нет. Устройство нарезки не раскрыто.
  • «Посмотрите сами»: запрос сессий дня из dds.session_v встал вторым, между событиями ODS и витриной DM; итоговая фраза — три запроса: источник, расчетная сущность, готовый ответ витрины. Якорь #dds-язык-бизнеса, на который ссылается ТЗ ступени 3, не изменился.

Как делалось: постановка — Fable; ревью постановки пропущено: тикет-срез по уже принятым решениям, вкусовых развилок не осталось. Проза — Codex gpt-6-astra medium, саморевью 1/1. Ревью — Opus (craftsman) свежей сессией, одна линия: 4 находки (фраза «как в Метрике» переворачивала довод; порядок примеров; перенос строки; «Во всех трех примерах»), все закрыты и перепроверены. Вычитка — свежий тред Sol по ai-text-lint, 11 правок; две откачены при приемке глазами: фраза о группировке по VisitID стала читаться как совет так делать, а из итоговой фразы ушли тире, которые в репозитории норма.

Урок прогона: вычитка ai-text-lint трогает смысл там, где сжимает довод «иначе было бы плохо» до одной фразы, и режет тире вопреки стилю репозитория. Правки вычитки читать глазами построчно, а не по отчету.

Дальше по карте: ТЗ ступени 4 «Перепиши нарезку стенда», тикет заводится при старте.

## Резолюция Сделано в PR #235 (ветка 234-dds-chapter), слияние закроет тикет. **Что остается:** - Раздел «DDS: язык бизнеса» главы `docs/handbook/storage-layers.md` вырос с 6 до 13 строк: договоренность о визите (кука, пауза дольше 30 минут, граница модельных суток; аналитик зовет визит сессией), довод «почему сами» (в бою визиты режет Метрика и отдает `VisitID` в событиях; стенд играет ее роль, `VisitID` остается эталоном, иначе сборка свелась бы к группировке по чужому полю), `session_id` чеканит стенд, читать через `dds.session_v`, в `dds.event_v` поля `VisitID` нет. Устройство нарезки не раскрыто. - «Посмотрите сами»: запрос сессий дня из `dds.session_v` встал вторым, между событиями ODS и витриной DM; итоговая фраза — три запроса: источник, расчетная сущность, готовый ответ витрины. Якорь `#dds-язык-бизнеса`, на который ссылается ТЗ ступени 3, не изменился. **Как делалось:** постановка — Fable; ревью постановки пропущено: тикет-срез по уже принятым решениям, вкусовых развилок не осталось. Проза — Codex gpt-6-astra medium, саморевью 1/1. Ревью — Opus (craftsman) свежей сессией, одна линия: 4 находки (фраза «как в Метрике» переворачивала довод; порядок примеров; перенос строки; «Во всех трех примерах»), все закрыты и перепроверены. Вычитка — свежий тред Sol по ai-text-lint, 11 правок; две откачены при приемке глазами: фраза о группировке по `VisitID` стала читаться как совет так делать, а из итоговой фразы ушли тире, которые в репозитории норма. **Урок прогона:** вычитка ai-text-lint трогает смысл там, где сжимает довод «иначе было бы плохо» до одной фразы, и режет тире вопреки стилю репозитория. Правки вычитки читать глазами построчно, а не по отчету. **Дальше по карте:** ТЗ ступени 4 «Перепиши нарезку стенда», тикет заводится при старте.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#234