docs(course): маркеры «сверить-на-стенде» заменены живыми числами (#23)
Зачем: тикет #23 — каждое цитируемое число курса сверено с живым стендом; до этого в уроках стояли заглушки. Что: - уроки 00–04: 18 маркеров заполнены числами свежего импорта (280 437 событий, нули в таблицах ошибок, счётчики ODS/DDS); - лаба 07: таблица manifest после дня 4 (374 092 / 34 801 / 5 388), переходящие визиты по стыкам (35/22/26), числа после дня 5; - лаба 08: каноническая граница трёх дней, пример замера свежести (лаг 3:45 модельного времени до догона, ETL ~29 с) и вернувшегося пользователя; две живые поправки разбора времени: убран принудительный UTC в разборе STG и суффикс +00:00 в сравнении границы (ловились только на живом стенде). Проверка: детерминизм подтверждён двумя независимыми циклами сброс→импорт→инкремент (числа manifest и checksum_sha256 дней 4 и 5 совпали бит в бит); chain-check зелёный; сценарий лабы 08 прогнан вживую, включая стоп/продолжение и красный full_refresh=false из урока 4; grep «сверить-на-стенде» пуст; ссылки и якоря целы; make test (219+31) и make lint зелёные; /ai-text-lint по лабам — без существенных находок. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -82,19 +82,18 @@ docker compose run --rm --no-deps generator \
|
||||
events visits users min_event_timestamp max_event_timestamp model_t0 model_t_end profile
|
||||
```
|
||||
|
||||
Сверь результат с таблицей. Значения будут вписаны после контрольного прогона
|
||||
эталонного мира:
|
||||
Сверь результат с контрольными значениями:
|
||||
|
||||
| Поле | Ожидаем после дня 4 |
|
||||
|------|----------------------|
|
||||
| `events` | `<события-день-4>` <!-- сверить-на-стенде --> |
|
||||
| `visits` | `<визиты-день-4>` <!-- сверить-на-стенде --> |
|
||||
| `users` | `<пользователи-день-4>` <!-- сверить-на-стенде --> |
|
||||
| `min_event_timestamp` | `<минимальное-время>` <!-- сверить-на-стенде --> |
|
||||
| `max_event_timestamp` | `<максимальное-время>` <!-- сверить-на-стенде --> |
|
||||
| `model_t0` | `<левая-граница>` <!-- сверить-на-стенде --> |
|
||||
| `model_t_end` | `<правая-граница-дня-4>` <!-- сверить-на-стенде --> |
|
||||
| `profile` | `<профиль>` <!-- сверить-на-стенде --> |
|
||||
| `events` | `374092` |
|
||||
| `visits` | `34801` |
|
||||
| `users` | `5388` |
|
||||
| `min_event_timestamp` | `2026-01-01 00:00:00.000000` |
|
||||
| `max_event_timestamp` | `2026-01-04 23:59:58.581616` |
|
||||
| `model_t0` | `2026-01-01T00:00:00+00:00` |
|
||||
| `model_t_end` | `2026-01-05T00:00:00+00:00` |
|
||||
| `profile` | `daily-wave` |
|
||||
|
||||
Здесь числа накопительные: `events`, `visits` и `users` относятся ко всему миру
|
||||
от `model_t0` до `model_t_end`, а не только к четвёртому дню.
|
||||
@@ -128,7 +127,9 @@ ORDER BY visit_start;
|
||||
```
|
||||
|
||||
Запрос должен найти хотя бы один визит, чьи события лежат по разные стороны
|
||||
полуночи. Подойдёт любой стык внутри мира: 1→2, 2→3 или 3→4.
|
||||
полуночи. На контрольном мире он находит `35`, `22` и `26` визитов на стыках
|
||||
1→2, 2→3 и 3→4. Для проверки нового дня достаточно увидеть `26` визитов на
|
||||
стыке 3→4.
|
||||
|
||||
> **Как слова связаны со схемой.** В manifest написано «визит», а в SQL такой
|
||||
> визит обозначен `click_id`. Отдельной таблицы визитов нет: контекст лежит в
|
||||
@@ -233,8 +234,8 @@ Airflow проигрывать все пропущенные интервалы
|
||||
2. `make generated-history-chain-check` заканчивается без ошибки;
|
||||
3. в `Events over Time` появился день 5.
|
||||
|
||||
Точные числа после дня 5 не фиксируем: это результат учебной правки.
|
||||
<!-- сверить-на-стенде -->
|
||||
После дня 5 контрольный manifest показывает `468025` событий, `43482` визита,
|
||||
`6713` пользователей и `model_t_end = 2026-01-06T00:00:00+00:00`.
|
||||
|
||||
### Верни как было
|
||||
|
||||
@@ -249,9 +250,9 @@ Airflow проигрывать все пропущенные интервалы
|
||||
| Действие | Где смотреть | Что ожидать |
|
||||
|----------|--------------|-------------|
|
||||
| запустить `world_next_day` с пустой формой | Airflow graph | все пять задач зелёные, `etl_pipeline` вызван с `full_refresh=true` |
|
||||
| прочитать manifest после дня 4 | `kafka-manifest-summary` | числа совпадают с таблицей секции 2 <!-- сверить-на-стенде --> |
|
||||
| прочитать manifest после дня 4 | `kafka-manifest-summary` | числа совпадают с таблицей секции 2 |
|
||||
| проверить накопленную цепочку | `make generated-history-chain-check` | команда завершается без ошибки |
|
||||
| найти переходящие визиты | запрос в `dds.event` | хотя бы один `click_id` пересекает полночь <!-- сверить-на-стенде --> |
|
||||
| найти переходящие визиты | запрос в `dds.event` | на стыке 3→4 найдено `26` визитов |
|
||||
| снять паузу с DAG | Airflow runs | на ближайшей получасовой границе приезжает один запланированный день |
|
||||
| вернуть паузу и пройти сброс | Airflow и Superset | расписание выключено, снова видны три эталонных дня |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user