Включение этой лабораторной в обязательную программу принято. Нужно подготовить ее постановку и воспроизводимый опыт.
Студент восстанавливает чтение справочника Postgres через PXF и сохранение полного снимка в STG. Он различает внешнюю таблицу, которая читает источник, и внутреннюю таблицу, которая хранит полученный снимок; умеет проверить полноту приема и повторяемость загрузки.
Место и самостоятельная часть
Предлагаемое место — после быстрого старта и знакомства с моделью, перед существующими заданиями ODS. Базовый кандидат — airports. При подготовке определить, какие части DDL и загрузки студент удаляет и восстанавливает. Конфигурация JDBC-сервера PXF уже есть: явно указать, что выдано готовым, какие параметры внешней таблицы студент задает сам и как проверяет чтение источника. Готовые DAG и нижние слои дают обратную связь.
Что предусмотреть
Зафиксировать исходное состояние и независимую сверку с таблицей источника. Вычитание должно делать отсутствие собственной реализации заметным: старые строки STG не должны выдавать прошлую загрузку за выполненное задание.
Восстановить внешнюю таблицу и загрузку снимка: бизнес-поля, _load_id, _load_ts, event_ts и ключ источника.
Загрузить снимок A и повторить его с тем же _load_id на неизменном источнике. Бизнес-строки сохраняются, копии ключей внутри батча не появляются.
Сохранить исходное значение и изменить один неключевой атрибут в Postgres, например русское название аэропорта с сохранением структуры JSON. Загрузить снимок B с новым _load_id: он содержит новое значение, A сохраняет прежнее. Сверить оба результата; копирование старого снимка вместо чтения источника должно обнаруживаться.
Подготовить общий батч B четырех справочников и провести его через действующий resolver в ODS. Проверить выбранный _load_id и новое значение атрибута: успешный ODS на прежнем общем батче не подтверждает новую загрузку.
Восстановить атрибут источника и получить согласованный снимок для продолжения. Описать, какие контрольные батчи остаются в STG после опыта.
Критерии этой лабораторной
Выбраны объект, граница вычитания и уровень помощи; для первых действий с PXF даны нужные ориентиры.
Студент сравнивает ключи и значения источника со своим снимком, а не ограничивается количеством строк.
Повтор A сохраняет результат; B отражает изменение источника, а A сохраняет прежнее значение. Проверка отвергает копию старого снимка.
Общий STG-батч B принят ODS с ожидаемыми метками и измененным атрибутом.
Исходное значение восстановлено; после работы эталонная цепочка снова работает на согласованных данных.
Границы и результат работы автора
Подготовить задание для студента, необходимые заготовки/проверки и проверенный способ выполнения. Назвать входное состояние, самостоятельную часть, проверочные случаи и состояние для продолжения. Готовый стенд должен запускаться до лабораторной; выбранную часть разбирает уже студент во время задания. Стенд можно ломать и пересобирать, сохраняя файлы решения и понятный способ продолжения.
Материалы для автора и полное решение относятся к solution; инструкция для студента и необходимые общие средства — к main. Переносить изменения выборочно с учетом различий веток. При размещении задания обновить его место во входе в задания и связанные ссылки; существующие задания ODS, измерений и DM сохраняются.
Общая проверка готовности
Из описанного начального состояния выполнены все случаи задания на стенде; сохранены команды и наблюдаемые результаты.
Неверное решение обнаруживается предусмотренными проверками; восстановление и повторный запуск проверены там, где они входят в задание.
Инструкция на русском соответствует подготовке учащегося, различает готовые части и самостоятельные решения; результат позволяет продолжить маршрут.
Проверены ссылки и команды; git diff --check пройден. Для изменений Python/DAG выполнены make lint и make test, а пропуски тестов перечислены отдельно. Статические проверки не заменяют учебный прогон.
Part of #8
## Статус и учебный результат
Включение этой лабораторной в обязательную программу принято. Нужно подготовить ее постановку и воспроизводимый опыт.
Студент восстанавливает чтение справочника Postgres через PXF и сохранение полного снимка в STG. Он различает внешнюю таблицу, которая читает источник, и внутреннюю таблицу, которая хранит полученный снимок; умеет проверить полноту приема и повторяемость загрузки.
## Место и самостоятельная часть
Предлагаемое место — после быстрого старта и знакомства с моделью, перед существующими заданиями ODS. Базовый кандидат — `airports`. При подготовке определить, какие части DDL и загрузки студент удаляет и восстанавливает. Конфигурация JDBC-сервера PXF уже есть: явно указать, что выдано готовым, какие параметры внешней таблицы студент задает сам и как проверяет чтение источника. Готовые DAG и нижние слои дают обратную связь.
## Что предусмотреть
1. Зафиксировать исходное состояние и независимую сверку с таблицей источника. Вычитание должно делать отсутствие собственной реализации заметным: старые строки STG не должны выдавать прошлую загрузку за выполненное задание.
2. Восстановить внешнюю таблицу и загрузку снимка: бизнес-поля, `_load_id`, `_load_ts`, `event_ts` и ключ источника.
3. Загрузить снимок A и повторить его с тем же `_load_id` на неизменном источнике. Бизнес-строки сохраняются, копии ключей внутри батча не появляются.
4. Сохранить исходное значение и изменить один неключевой атрибут в Postgres, например русское название аэропорта с сохранением структуры JSON. Загрузить снимок B с новым `_load_id`: он содержит новое значение, A сохраняет прежнее. Сверить оба результата; копирование старого снимка вместо чтения источника должно обнаруживаться.
5. Подготовить общий батч B четырех справочников и провести его через действующий resolver в ODS. Проверить выбранный `_load_id` и новое значение атрибута: успешный ODS на прежнем общем батче не подтверждает новую загрузку.
6. Восстановить атрибут источника и получить согласованный снимок для продолжения. Описать, какие контрольные батчи остаются в STG после опыта.
## Критерии этой лабораторной
- [x] Выбраны объект, граница вычитания и уровень помощи; для первых действий с PXF даны нужные ориентиры.
- [x] Студент сравнивает ключи и значения источника со своим снимком, а не ограничивается количеством строк.
- [x] Повтор A сохраняет результат; B отражает изменение источника, а A сохраняет прежнее значение. Проверка отвергает копию старого снимка.
- [x] Общий STG-батч B принят ODS с ожидаемыми метками и измененным атрибутом.
- [x] Исходное значение восстановлено; после работы эталонная цепочка снова работает на согласованных данных.
## Границы и результат работы автора
Подготовить задание для студента, необходимые заготовки/проверки и проверенный способ выполнения. Назвать входное состояние, самостоятельную часть, проверочные случаи и состояние для продолжения. Готовый стенд должен запускаться до лабораторной; выбранную часть разбирает уже студент во время задания. Стенд можно ломать и пересобирать, сохраняя файлы решения и понятный способ продолжения.
Материалы для автора и полное решение относятся к `solution`; инструкция для студента и необходимые общие средства — к `main`. Переносить изменения выборочно с учетом различий веток. При размещении задания обновить его место во входе в задания и связанные ссылки; существующие задания ODS, измерений и DM сохраняются.
## Общая проверка готовности
- [x] Из описанного начального состояния выполнены все случаи задания на стенде; сохранены команды и наблюдаемые результаты.
- [x] Неверное решение обнаруживается предусмотренными проверками; восстановление и повторный запуск проверены там, где они входят в задание.
- [x] Инструкция на русском соответствует подготовке учащегося, различает готовые части и самостоятельные решения; результат позволяет продолжить маршрут.
- [x] Проверены ссылки и команды; `git diff --check` пройден. Для изменений Python/DAG выполнены `make lint` и `make test`, а пропуски тестов перечислены отдельно. Статические проверки не заменяют учебный прогон.
## Сначала прочитать
- Задачу серии #8 и [авторскую заметку](https://git.dementev.space/ddmitry/airflow-greenplum/src/branch/solution/docs/design/labs_development.md).
- [DDL PXF и STG](https://git.dementev.space/ddmitry/airflow-greenplum/src/branch/main/sql/stg/airports_ddl.sql)
- [Загрузка снимка](https://git.dementev.space/ddmitry/airflow-greenplum/src/branch/main/sql/stg/airports_load.sql)
- [DQ снимка](https://git.dementev.space/ddmitry/airflow-greenplum/src/branch/main/sql/stg/airports_dq.sql)
- [Выбор батча ODS](https://git.dementev.space/ddmitry/airflow-greenplum/src/branch/main/airflow/dags/bookings_to_gp_ods.py)
- [Руководство STG](https://git.dementev.space/ddmitry/airflow-greenplum/src/branch/main/docs/bookings_to_gp_stage.md)
Студент восстанавливает внешний DDL и загрузку airports, испытывает повтор и изменение источника, передает новый снимок в ODS. Задание стоит перед существующими загрузками ods.airplanes и ods.seats. Подсказки по инструментам раскрываются по месту; авторский протокол отделен от результата студента.
Проверено на стенде: 5501 аэропорт; повтор одного батча без дублей; новое название в следующем снимке при сохранении первого; отказ сверки на старой копии с новым ID; выбор нового общего батча действующим resolver ODS; восстановление источника и проход до DM. После свежего ревью дополнена помощь при уже записанных дублях, этот случай отдельно воспроизведен и восстановлен. Оставшихся замечаний ревью нет.
make lint и make test: 14 passed, 15 skipped. Пропуски — 14 smoke-тестов из-за существующих заглушек Airflow и один opt-in интеграционный тест ODS; настоящий DagBag и учебный маршрут проверены отдельно. Проверены ссылки, карта, раскрываемые подсказки и рендер Gitea.
Выполнено и влито: [PR #16 → main](https://git.dementev.space/ddmitry/airflow-greenplum/pulls/16), [PR #15 → solution](https://git.dementev.space/ddmitry/airflow-greenplum/pulls/15).
Студент восстанавливает внешний DDL и загрузку airports, испытывает повтор и изменение источника, передает новый снимок в ODS. Задание стоит перед существующими загрузками ods.airplanes и ods.seats. Подсказки по инструментам раскрываются по месту; авторский протокол отделен от результата студента.
Проверено на стенде: 5501 аэропорт; повтор одного батча без дублей; новое название в следующем снимке при сохранении первого; отказ сверки на старой копии с новым ID; выбор нового общего батча действующим resolver ODS; восстановление источника и проход до DM. После свежего ревью дополнена помощь при уже записанных дублях, этот случай отдельно воспроизведен и восстановлен. Оставшихся замечаний ревью нет.
`make lint` и `make test`: 14 passed, 15 skipped. Пропуски — 14 smoke-тестов из-за существующих заглушек Airflow и один opt-in интеграционный тест ODS; настоящий DagBag и учебный маршрут проверены отдельно. Проверены ссылки, карта, раскрываемые подсказки и рендер Gitea.
[Лабораторная](https://git.dementev.space/ddmitry/airflow-greenplum/src/branch/main/docs/assignment/pxf_airports.md) · [Материалы автора](https://git.dementev.space/ddmitry/airflow-greenplum/src/branch/solution/docs/design/pxf_airports_lab.md) · [Команды и результаты прогона](https://git.dementev.space/ddmitry/airflow-greenplum/src/branch/solution/docs/reports/2026-09-22-pxf-airports.md).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #8
Статус и учебный результат
Включение этой лабораторной в обязательную программу принято. Нужно подготовить ее постановку и воспроизводимый опыт.
Студент восстанавливает чтение справочника Postgres через PXF и сохранение полного снимка в STG. Он различает внешнюю таблицу, которая читает источник, и внутреннюю таблицу, которая хранит полученный снимок; умеет проверить полноту приема и повторяемость загрузки.
Место и самостоятельная часть
Предлагаемое место — после быстрого старта и знакомства с моделью, перед существующими заданиями ODS. Базовый кандидат —
airports. При подготовке определить, какие части DDL и загрузки студент удаляет и восстанавливает. Конфигурация JDBC-сервера PXF уже есть: явно указать, что выдано готовым, какие параметры внешней таблицы студент задает сам и как проверяет чтение источника. Готовые DAG и нижние слои дают обратную связь.Что предусмотреть
_load_id,_load_ts,event_tsи ключ источника._load_idна неизменном источнике. Бизнес-строки сохраняются, копии ключей внутри батча не появляются._load_id: он содержит новое значение, A сохраняет прежнее. Сверить оба результата; копирование старого снимка вместо чтения источника должно обнаруживаться._load_idи новое значение атрибута: успешный ODS на прежнем общем батче не подтверждает новую загрузку.Критерии этой лабораторной
Границы и результат работы автора
Подготовить задание для студента, необходимые заготовки/проверки и проверенный способ выполнения. Назвать входное состояние, самостоятельную часть, проверочные случаи и состояние для продолжения. Готовый стенд должен запускаться до лабораторной; выбранную часть разбирает уже студент во время задания. Стенд можно ломать и пересобирать, сохраняя файлы решения и понятный способ продолжения.
Материалы для автора и полное решение относятся к
solution; инструкция для студента и необходимые общие средства — кmain. Переносить изменения выборочно с учетом различий веток. При размещении задания обновить его место во входе в задания и связанные ссылки; существующие задания ODS, измерений и DM сохраняются.Общая проверка готовности
git diff --checkпройден. Для изменений Python/DAG выполненыmake lintиmake test, а пропуски тестов перечислены отдельно. Статические проверки не заменяют учебный прогон.Сначала прочитать
Выполнено и влито: PR #16 → main, PR #15 → solution.
Студент восстанавливает внешний DDL и загрузку airports, испытывает повтор и изменение источника, передает новый снимок в ODS. Задание стоит перед существующими загрузками ods.airplanes и ods.seats. Подсказки по инструментам раскрываются по месту; авторский протокол отделен от результата студента.
Проверено на стенде: 5501 аэропорт; повтор одного батча без дублей; новое название в следующем снимке при сохранении первого; отказ сверки на старой копии с новым ID; выбор нового общего батча действующим resolver ODS; восстановление источника и проход до DM. После свежего ревью дополнена помощь при уже записанных дублях, этот случай отдельно воспроизведен и восстановлен. Оставшихся замечаний ревью нет.
make lintиmake test: 14 passed, 15 skipped. Пропуски — 14 smoke-тестов из-за существующих заглушек Airflow и один opt-in интеграционный тест ODS; настоящий DagBag и учебный маршрут проверены отдельно. Проверены ссылки, карта, раскрываемые подсказки и рендер Gitea.Лабораторная · Материалы автора · Команды и результаты прогона.