Лабораторная: восстановить прием справочника через PXF в STG #9

Closed
opened 2026-09-22 16:35:41 +03:00 by ddmitry · 1 comment
Owner

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 после опыта.

Критерии этой лабораторной

  • Выбраны объект, граница вычитания и уровень помощи; для первых действий с 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)
ddmitry added the needs-triage label 2026-09-22 16:35:41 +03:00
Author
Owner

Выполнено и влито: 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.

Лабораторная · Материалы автора · Команды и результаты прогона.

Выполнено и влито: [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).
ddmitry removed the needs-triage label 2026-09-22 18:34:21 +03:00
Sign in to join this conversation.