docs(labs): упрощен язык учебных заданий

Зачем: помочь менти понять действия, проверить результат и оценить освоенное умение.

Что: вычитаны 13 заданий основной программы и общий индекс. Итоговые списки обращены к учащемуся, убраны история разработки и повторы. Правила учебного текста записаны в программе, из AGENTS.md добавлена ссылка.

Проверка: git diff --check, локальные ссылки и ссылки на измененные заголовки прошли. Блоки кода и таблицы требований совпадают с исходными. Упражнения на стенде повторно не выполнялись: изменен только текст.
This commit is contained in:
ddadmin committed 2026-09-13 11:01:35 -04:00
1 parent a03838b953
commit 4058e18864
16 files changed
+287 -269

No files matched your search

+20 -21
View File
@@ -1,7 +1,7 @@
# Перепишите разбор заказов в ODS
**Чему учит:** сначала измерить обе ветви разбора на управляемом срезе, затем
переписать переход и повторить тот же опыт.
**Чему учит:** переписать разбор заказов и на пробных сообщениях проверить,
что годные строки и брак попадают в свои таблицы без потерь.
## Сначала прочитать
@@ -11,9 +11,9 @@
- [`orders_ingest`](../../dags/orders_ingest.py);
- [`order_parse.sql`](../../sql/ods/order_parse.sql).
Готового запроса для сверки управляемого среза в репозитории нет.
Запрос для проверки пробных строк вы напишете сами.
## Граница задания
## Что предстоит сделать
Сначала проведите опыт на готовом `order_parse.sql`. Затем удалите его SQL,
соберите разбор заново и повторите опыт с другим маркером.
@@ -72,7 +72,7 @@ jq -cn --arg marker "$LAB_MARKER" --arg day "$LAB_DAY" '
' > "$LAB_BATCH"
```
Отправьте файл в обычный топик заказов штатным производителем контейнера:
Отправьте файл в обычный топик заказов утилитой из контейнера Kafka:
```bash
docker compose exec -T kafka /opt/kafka/bin/kafka-console-producer.sh \
@@ -123,7 +123,7 @@ SETTINGS mutations_sync = 2;
В ClickHouse 26.3 мутации выполняются в фоне. С `mutations_sync = 2` команда
ждет их завершения на всех репликах. Запросами к трем Distributed-таблицам
докажите, что строк маркера не осталось, затем удалите временный файл.
убедитесь, что строк маркера не осталось, затем удалите временный файл.
Группа `clickstream_orders` уже подтвердила эти сообщения, поэтому обычный
повтор `orders_ingest` их не прочитает. В Kafka они остаются до удаления по
@@ -137,8 +137,8 @@ SETTINGS mutations_sync = 2;
## Перепишите разбор
Удалите готовый SQL из `sql/ods/order_parse.sql` и сохраните его договор с
`orders_ingest`:
Удалите готовый SQL из `sql/ods/order_parse.sql` и напишите свой. Чтобы
`orders_ingest` мог его использовать, сохраните следующие условия:
- вход - строки `stg.orders_raw_dist` одного `{load_id:String}`;
- каждая строка среза попадает ровно в один результат: годный заказ или брак;
@@ -161,21 +161,20 @@ SETTINGS mutations_sync = 2;
шард. Затем очистите второй срез теми же адресными командами и запустите
`dq_check`.
## Когда можно остановиться
## Завершите опыт
Оба маркера отсутствуют в STG, ODS, таблице брака и DDS; временные файлы
удалены. Семь DQ дают зеленый результат. В таком состоянии можно перейти к
Убедитесь, что оба маркера отсутствуют в STG, ODS, таблице брака и DDS,
временные файлы удалены, а семь проверок успешны. Теперь можно перейти к
сборке DDS, не снимая паузу с модельного времени. Если вы прерываетесь и до
опыта `world_live` работал, снимите его с паузы.
## Приемка
## Что должно получиться
- [ ] до переписывания зафиксированы баланс 4 = 1 + 3, три класса брака,
деловые поля текущей версии и фактический шард;
- [ ] переписан только `sql/ods/order_parse.sql`, несущая инфраструктура не
изменена;
- [ ] после переписывания новый срез дал тот же результат;
- [ ] обе годные строки различали `created_at` и `updated_at`;
- [ ] проверки `hostName()` не нашли строки ODS на чужом шарде;
- [ ] строки обоих опытов удалены только по своим маркерам;
- [ ] после очистки общий конвейер и семь DQ находятся в зеленом состоянии.
- [ ] у вас сохранены результаты до переписывания: четыре строки дали
один заказ и три класса брака; вы сверили поля текущей версии и шард;
- [ ] вы переписали `sql/ods/order_parse.sql`, сохранив остальные части стенда;
- [ ] ваш разбор дал тот же результат на новой пробной пачке;
- [ ] вы проверили разные значения `created_at` и `updated_at` у годной
строки в обоих опытах и подтвердили правильный шард через `hostName()`;
- [ ] вы удалили строки обоих опытов по их маркерам;
- [ ] после очистки конвейер и все семь проверок успешны.