# Порядок запуска DAG Все загрузочные DAG в стенде запускаются вручную (`schedule=None`). Завершение одного слоя не запускает следующий автоматически. Подготовка Docker и источника находится в [быстром старте](../README.md#быстрый-старт-основной-сценарий-bookings--stg--ods--dds--dm). ## Создание таблиц Перед первой загрузкой выполните по порядку: 1. `bookings_stg_ddl` создает STG и внешние таблицы `*_ext` для чтения через PXF. 2. `bookings_ods_ddl` создает типизированные таблицы ODS. 3. `bookings_dds_ddl` создает измерения и факт DDS. 4. `bookings_dm_ddl` создает витрины DM. Альтернатива четырем запускам: `make ddl-gp`. DDL создает структуру; для наполнения нужны отдельные загрузки. В заданиях таблицы и задачи уже подготовлены, поэтому перед каждым повторным запуском загрузки применять DDL не требуется. ## Проход данных по слоям Запускайте следующий DAG после успешного завершения всех задач предыдущего. Эта последовательность показывает зависимости загрузок; связи строк и зерно объектов смотрите на [карте](design/architecture-map.html), открытой [локально](design/db_schema.md#как-открыть-карту). | Порядок | DAG и руководство | Что меняется в данных | |---|---|---| | 1 | [bookings_to_gp_stage](bookings_to_gp_stage.md) | Генератор добавляет учебный день в Bookings; STG получает инкременты транзакций и полные снимки справочников с `_load_id = run_id` STG | | 2 | [bookings_to_gp_ods](bookings_to_gp_ods.md) | Resolver выбирает общий STG-батч справочников; их снимки заменяются целиком. Транзакционные загрузки читают дельту STG по `_load_ts` и обновляют строки по бизнес-ключу | | 3 | [bookings_to_gp_dds](bookings_to_gp_dds.md) | Сначала выполняются загрузки измерений, затем факт: вставляются новые пары `(ticket_no, flight_id)`, у существующих обновляются цена, место и признак посадки | | 4 | [bookings_to_gp_dm](bookings_to_gp_dm.md) | `sales_report` пересчитывает полные агрегаты дат, затронутых изменениями факта; поведение остальных витрин задано в ТЗ | На исходной `main` готовы весь STG, семь таблиц ODS, календарь, аэропорты, тарифы, факт и `sales_report`. Загрузки и DQ остальных объектов являются [заданиями](assignment/README.md). Успех этих задач с `SELECT 1;` оставляет таблицы пустыми. У факта до реализации измерений могут быть `NULL` в `passenger_sk`, `route_sk` и `airplane_sk`. ## Повторный запуск и проверка задания Чтобы получить следующий учебный день, повторите цепочку STG → ODS → DDS → DM. Когда проверяете правку SQL своего слоя на уже загруженных источниках, начните с этого слоя; новый STG запустит генератор еще раз. Подробности выбора батча и повторного запуска находятся в руководстве слоя. После реализации измерений обычный повтор DDS не заполнит старые SK факта. Выполните [пересчет по ТЗ](assignment/analyst_spec.md#пересчёт-факта-после-реализации-измерений), затем обновите DM. Для самопроверки задания откройте [«Запуск и проверка»](assignment/README.md#запуск-и-проверка). `bookings_validate` запускайте отдельно от загрузок: дождитесь всего DAG и успешного `validate_dds.scd2_restore` перед следующей записью в хранилище. Тест SCD2 временно меняет данные и восстанавливает их из копии. В [лабораторной PXF](assignment/pxf_airports.md) снимки справочников готовит `lab_pxf_airports`: он выполняет только четыре справочника STG и их DQ. Для передачи снимка и восстановления нижних слоев используйте обычные DAG ODS → DDS → DM. Следующий учебный день по-прежнему загружается полной цепочкой, начиная с `bookings_to_gp_stage`.