docs(course): синхронизирован LEARNING_PLAN с фактом — правки §3.1 сделаны
- Зачем:
- все 11 чекбоксов §3.1 по урокам 2–3 были `[ ]`, хотя правки давно
в коде/уроках; план вводил в заблуждение «работа не сделана».
- Что:
- проставлены `[x]` по урокам 2 и 3 после сверки с реальным кодом
(шапки «поток данных», DQ-split «зачем», чистка legacy-MV, демоут DM,
seed 1919, war-story kafka_ts, recap цепочки).
- в §4 добавлена строка статуса: уроки 0–6 написаны, контент собран.
- Проверка:
- grep '\[ \]' docs/course/LEARNING_PLAN.md # незакрытых пунктов §3.1 нет
This commit is contained in:
@@ -83,32 +83,32 @@ Kafka из роадмапа — оно даёт словарь терминов.
|
||||
- В финале урока — мост к уроку 2: вопрос «почему дальше не MV?».
|
||||
|
||||
**Урок 2 — STG→ODS, типизация + DQ-split (`sql/ods/20_stg_to_ods.sql` + DDL `sql/ddl/ods/20_ods.sql`):**
|
||||
- [ ] **Кандидат на war-story по типам:** баг `kafka_ts` из урока 1 (`toInt64(DateTime64)`
|
||||
- [x] **Кандидат на war-story по типам:** баг `kafka_ts` из урока 1 (`toInt64(DateTime64)`
|
||||
молча срезал миллисекунды → 1970). Это идеальная иллюстрация темы урока — «тихая
|
||||
потеря данных на неверном типе». Решить при написании, давать ли как пример.
|
||||
- [ ] Добавить однострочный «поток данных» в шапку `20_stg_to_ods.sql`
|
||||
потеря данных на неверном типе». Решено: дан как пример в уроке 2 (war-story в финале).
|
||||
- [x] Добавить однострочный «поток данных» в шапку `20_stg_to_ods.sql`
|
||||
(`stg.*_raw → ods.* + ods.*_errors`) — п.3 чеклиста.
|
||||
- [ ] Добавить строку «зачем»: основная таблица = валидный ключ (но может иметь
|
||||
- [x] Добавить строку «зачем»: основная таблица = валидный ключ (но может иметь
|
||||
`parse_errors` по неключевым полям), а `*_errors` = любая ошибка. Без этого
|
||||
непонятно, почему одна строка попадает в оба места (двойной учёт) — проваливается
|
||||
тест одного прохода.
|
||||
- [ ] Убрать мусор: в `sql/ddl/ods/20_ods.sql` (стр. ~15–25) — восемь
|
||||
- [x] Убрать мусор: в `sql/ddl/ods/20_ods.sql` (стр. ~15–25) — восемь
|
||||
`DROP TABLE IF EXISTS stg.mv_*_to_ods` (чистка legacy-MV). Шум прошлой
|
||||
архитектуры, мента читает его раньше сути. Вынести из учебного файла.
|
||||
- [ ] Минор: в `20_ods.sql` разнобой партиционирования (`browser` по `event_date`,
|
||||
- [x] Минор: в `20_ods.sql` разнобой партиционирования (`browser` по `event_date`,
|
||||
остальные по `src_ingest_ts`) — одна строка «почему» либо унифицировать.
|
||||
- В «Зачем» урока — ответ на мост из урока 1: батч ради наблюдаемости/управляемости.
|
||||
|
||||
**Урок 3 — ODS→DDS, сборка сущностей (`sql/dds/30_ods_to_dds.sql` + DDL `sql/ddl/dds/30_dds.sql`):**
|
||||
- [ ] Добавить однострочный «поток данных» в шапку `30_ods_to_dds.sql`
|
||||
- [x] Добавить однострочный «поток данных» в шапку `30_ods_to_dds.sql`
|
||||
(`ods.* → dds.click + dds.event`) — п.3 чеклиста.
|
||||
- [ ] В финале урока — **recap всей цепочки** STG→ODS→DDS: защита от фрагментации после
|
||||
- [x] В финале урока — **recap всей цепочки** STG→ODS→DDS: защита от фрагментации после
|
||||
расщепления середины (менти должен собрать сквозную модель, а не три изолированных слоя).
|
||||
- [ ] **Демоут DM** оформляем здесь: убрать мусор в `sql/dm/40_dds_to_dm.sql`
|
||||
- [x] **Демоут DM** оформляем здесь: убрать мусор в `sql/dm/40_dds_to_dm.sql`
|
||||
(стр. ~14–37, закомментированный «пример материализации витрины») и превратить его
|
||||
в короткую заметку «VIEW сейчас, материализуем если затормозит, см. `docs/ARCHITECTURE.md`».
|
||||
Добавить «поток данных» в шапку `40_dds_to_dm.sql`.
|
||||
- [ ] Минор: `sql/ddl/dm/40_dm.sql` — магическое `1919` в `groupArraySample`
|
||||
- [x] Минор: `sql/ddl/dm/40_dm.sql` — магическое `1919` в `groupArraySample`
|
||||
(строка «зачем» или упростить).
|
||||
- Сами витрины DM показываем в деле в уроках 5–6, отдельного разбора не делаем.
|
||||
|
||||
@@ -140,6 +140,10 @@ Kafka из роадмапа — оно даёт словарь терминов.
|
||||
|
||||
## 4. Что дальше
|
||||
|
||||
Пишем уроки по одному, по шаблону из `LESSON_STANDARD.md`, начиная с урока 1
|
||||
(Kafka→CH). Урок 0 (разминка на Kafka UI) можно готовить параллельно — он не зависит
|
||||
от полировки кода. Правки кода из §3.1 применяем в составе соответствующего урока.
|
||||
Все уроки 0–6 написаны (`lessons/`), правки кода §3.1 применены в составе уроков —
|
||||
чекбоксы выше сверены с реальным кодом 2026-06-06. Базовый контент курса собран.
|
||||
|
||||
Исходный план фазы написания (оставлен как контекст): пишем уроки по одному, по
|
||||
шаблону из `LESSON_STANDARD.md`, начиная с урока 1 (Kafka→CH); урок 0 (разминка на
|
||||
Kafka UI) готовим параллельно — он не зависит от полировки кода; правки кода из §3.1
|
||||
применяем в составе соответствующего урока.
|
||||
|
||||
Reference in New Issue
Block a user