docs(handbook): четыре главы переписаны живым русским

Зачем: владелец прочел главы и нашел неестественные фразы: дашборды
«спрашивают», даги «двигают ось», заказ «ездит в слепках», Superset —
«витрины глазами», объекты «приезжают из файлов». Читателю такие
образы надо расшифровывать, а урок в них не прячется.

Что: в четырех главах олицетворения заменены прямыми формулировками,
«позиция мира» и «шаговый даг» раскрыты через world_position и имена
дагов, паспорт мира описан по составу и назначению, окно слепка
заказов объяснено словами, режимы генератора и правило импорта
Superset сказаны прямо. Тире и стрелки оставлены: это домашний стиль.

Проверка: проверки тикета #220 на битые ссылки и запретные слова
пусты, строки прозы не длиннее 80 знаков, git diff --check чист.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
ddadminandClaude Fable 5.1 committed 2026-09-03 02:00:37 -04:00
1 parent ac21399fe4
commit 043d1c1382
4 files changed
+110 -93

No files matched your search

+36 -32
View File
@@ -1,7 +1,7 @@
# Потоки Airflow и даги модельного времени
В Airflow есть два рода дагов. Даги модельного времени двигают мир вперед, а
дневной конвейер раскладывает прожитый день по слоям.
В Airflow два рода дагов. Даги мира создают мир и проигрывают модельные дни,
а дневной конвейер раскладывает сыгранный день по слоям хранилища.
```mermaid
flowchart LR
@@ -18,21 +18,21 @@ flowchart LR
материализованные представления переносят строки из STG в ODS без участия
Airflow.
Заказы приходят в топик `orders` слепком раз в модельные сутки. У слепка есть
начало и конец, поэтому даг `orders_ingest` забирает его целиком. Такой способ
приема называется [пакетным забором](../../CONTEXT.md).
Заказы приходят в топик `orders` один раз в модельные сутки, целым слепком. У
слепка есть начало и конец, поэтому даг `orders_ingest` забирает его одной
порцией. Такой способ приема называется [пакетным](../../CONTEXT.md).
## Даги мира
Два дага с тегом «жизненный цикл мира» создают мир:
Два дага с тегом «жизненный цикл мира» отвечают за стартовый мир:
| Даг | Что делает |
|---|---|
| `world_initialize` | Создает стартовый мир, если его еще нет |
| `world_recreate` | Удаляет только прикладной мир и создает его заново |
| `world_recreate` | Стирает данные мира и собирает стартовый мир заново |
Три дага с тегом «модельное время» двигают ось. Дагами модельного времени
называют только их.
Три дага с тегом «модельное время» проигрывают следующие дни. Именно их
называют дагами модельного времени.
| Даг | Что делает |
|---|---|
@@ -40,43 +40,47 @@ Airflow.
| `world_live_day` | Играет следующий день в темпе модельного времени |
| `world_live` | Запускает живые дни один за другим, пока снят с паузы |
Позиция мира — переменная Airflow `world_position`, номер первого несыгранного
дня. Шаговый даг ставит ее только после успешного дня: оборванный прогон позицию
не двигает.
Сколько дней уже сыграно, стенд помнит в переменной Airflow `world_position`:
в ней лежит номер первого несыгранного дня. `world_next_day` и `world_live_day`
записывают новое значение только после успешно сыгранного дня; оборванный
прогон его не меняет.
Сыграв день D, шаговый даг отправляет слепок заказов дня D−1 и ждет
`orders_ingest`. Эти связи разобраны в [справочнике
Сыграв день D, эти два дага отправляют слепок заказов за день D−1 и ждут, пока
`orders_ingest` его примет. Эти связи разобраны в [справочнике
мира](../architecture/world.md#даги-модельного-времени).
## Дневной конвейер
У `etl_pipeline` нет своей обработки. Он по очереди запускает `dds_transform`,
`dm_transform` и `dq_check` и ждет каждый даг. Параметров нет: объем работы
конвейер выводит из позиции мира и состояния слоев. Поэтому один и тот же запуск
верен и когда его запустил другой даг, и когда вы нажали кнопку, и когда его
повторяют после сбоя. Детали есть в [справочнике
конвейера](../architecture/etl.md#объём-прогона).
`dm_transform` и `dq_check` и ждет каждый даг. Параметров у него нет: сколько
дней обработать, он сам определяет по `world_position` и по тому, что уже лежит
в слоях. Поэтому один и тот же запуск верен и когда его запустил другой даг, и
когда вы нажали кнопку, и когда его повторяют после сбоя. Детали есть в
[справочнике конвейера](../architecture/etl.md#объём-прогона).
`world_next_day` не запускает конвейер. После пакетного шага слои догоняют мир
только по вашей команде. `world_live_day`, наоборот, запускает `etl_pipeline` и
ждет его. Поэтому даг остается в работе и после конца модельного дня.
`world_next_day` не запускает конвейер. После него слои хранилища отстают от
мира, пока вы не запустите конвейер сами. `world_live_day`, наоборот,
запускает `etl_pipeline` и ждет его. Поэтому даг остается в работе и после
конца модельного дня.
## Что значит красный
Красный `etl_pipeline` не отменяет сыгранного дня: позиция уже записана. Чинится
он перезапуском рукой — помнить о прошлом прогоне ничего не нужно. Кто запускает
конвейер, описано в [разделе о трех путях
запуска](../architecture/etl.md#три-пути-запуска).
Красный `etl_pipeline` не отменяет сыгранного дня: `world_position` уже
записана. Достаточно перезапустить конвейер рукой; разбираться, на чем
остановился прошлый прогон, не нужно. Кто запускает конвейер, описано в
[разделе о трех путях запуска](../architecture/etl.md#три-пути-запуска).
Контур DQ проверяет данные. В дневном конвейере это `dq_check`: красная задача
печатает нарушенные ключи. Состав проверок описан в [разделе «Звено DQ
Качество данных проверяет контур DQ. В дневном конвейере это даг `dq_check`:
упавшая задача печатает в лог ключи строк, не прошедших проверку. Состав
проверок описан в [разделе «Звено DQ
конвейера»](../architecture/dm.md#звено-dq-конвейера).
## Как найти в интерфейсе
Даги мира ищите по тегам «модельное время» и «жизненный цикл мира». Остальные
даги ищите по тегам «заказы», `etl`, `dds`, `dm` и `dq`. `homework_check` с
тегами `dm` и `labs` проверяет домашние работы; о нем расскажут уроки.
тегами `dm` и `labs` проверяет домашние работы; о нем рассказано в учебных
заданиях.
## Посмотрите сами
@@ -102,9 +106,9 @@ ORDER BY report_date DESC
LIMIT 3;
```
Трафик получил сыгранный день, а выручка — только предыдущий: с этим ходом
приехал слепок предыдущего дня. Сыгранный день получит выручку на следующем
ходу.
В трафике уже есть сыгранный день, а в выручке только предыдущий: вместе с этим
днем пришел слепок заказов за предыдущий. Выручка сыгранного дня появится после
следующего.
## Куда дальше