docs(airflow): выровнены формулировки для CSV и DQ сценариев

- Зачем:
  - убрать мелкие противоречия между спецификациями, учебным планом и заданиями.
  - сделать сценарий csv_to_postgres и csv_to_postgres_dq понятнее для студентов.
- Что:
  - уточнено, что csv_to_postgres отвечает за загрузку и предпросмотр данных, а DQ вынесен в отдельный DAG.
  - добавлены явные указания про каталог data/output и соединение postgres_training.
  - исправлены ссылки на задачу data_quality_summary в учебных заданиях.
- Проверка:
  - git diff -- airflow-docker/dag-specifications.md airflow-docker/educational-setup-plan.md airflow-docker/educational-tasks.md.
This commit is contained in:
2026-03-08 21:44:16 +03:00
parent af6b0a9fae
commit eaea33e761
3 changed files with 10 additions and 7 deletions
+4 -3
View File
@@ -92,12 +92,12 @@ id,name,department,salary
#### 2.2 csv_to_postgres.py #### 2.2 csv_to_postgres.py
**Learning Objectives:** **Learning Objectives:**
- Load CSV data into PostgreSQL database - Load CSV data into PostgreSQL database
- Implement data quality checks - Implement idempotent loading via temporary table
- Use XCom for passing file paths between tasks - Use XCom for passing file paths between tasks
- Work with PostgreSQL connections in Airflow - Work with PostgreSQL connections in Airflow
**Scenario:** **Scenario:**
Generate sample orders data as CSV, load it into PostgreSQL, and verify data quality. Generate sample orders data as CSV, preview it, and load it into PostgreSQL.
**Tasks:** **Tasks:**
- `create_orders_table`: Create public.orders table in PostgreSQL - `create_orders_table`: Create public.orders table in PostgreSQL
@@ -106,6 +106,7 @@ Generate sample orders data as CSV, load it into PostgreSQL, and verify data qua
- `load_csv_to_postgres`: Load CSV data into PostgreSQL using temporary table - `load_csv_to_postgres`: Load CSV data into PostgreSQL using temporary table
**Database Connection:** Uses `postgres_training` connection (auto-provisioned by init script). **Database Connection:** Uses `postgres_training` connection (auto-provisioned by init script).
**Generated Files:** CSV files are written to `/opt/airflow/data/output/`.
**Sample Data Structure:** **Sample Data Structure:**
```csv ```csv
@@ -115,7 +116,7 @@ order_id,order_ts,customer_id,amount
3,2023-10-02 09:15:00,103,2100.75 3,2023-10-02 09:15:00,103,2100.75
``` ```
**Data Quality Checks:** See `csv_to_postgres_dq.py` for automated validation. **Data Quality Checks:** Run `csv_to_postgres_dq.py` after loading to validate the target table.
#### 2.3 csv_to_postgres_dq.py #### 2.3 csv_to_postgres_dq.py
**Learning Objectives:** **Learning Objectives:**
+2 -1
View File
@@ -84,7 +84,8 @@ Create `.env` file with all variables hardcoded:
- `file_operations_dag.py` - CSV file processing - `file_operations_dag.py` - CSV file processing
**Level 2: Intermediate** **Level 2: Intermediate**
- `csv_to_postgres.py` - CSV to PostgreSQL pipeline with data quality checks - `csv_to_postgres.py` - CSV to PostgreSQL pipeline
- `csv_to_postgres_dq.py` - separate data quality checks for loaded orders
- `data_processing_dag.py` - ETL pipeline with multiple steps - `data_processing_dag.py` - ETL pipeline with multiple steps
- `branching_dag.py` - Conditional task execution - `branching_dag.py` - Conditional task execution
+4 -3
View File
@@ -140,6 +140,7 @@
- Добавьте в генератор CSV новую колонку `status` (например, со случайными значениями 'NEW', 'PROCESSING', 'COMPLETED'). - Добавьте в генератор CSV новую колонку `status` (например, со случайными значениями 'NEW', 'PROCESSING', 'COMPLETED').
- Обновите функцию `_create_table`, чтобы учесть новую колонку. - Обновите функцию `_create_table`, чтобы учесть новую колонку.
- Запустите DAG и проверьте, что данные успешно загрузились с новой колонкой. - Запустите DAG и проверьте, что данные успешно загрузились с новой колонкой.
- Убедитесь, что сгенерированный файл появился в каталоге `/opt/airflow/data/output/`.
**Цель задания:** Понять процесс изменения схемы данных на всех этапах пайплайна. **Цель задания:** Понять процесс изменения схемы данных на всех этапах пайплайна.
@@ -149,7 +150,7 @@
**Задача:** **Задача:**
- Перепишите задачу `create_orders_table`. Сейчас она использует `PythonOperator` и `PostgresHook` внутри Python-функции. - Перепишите задачу `create_orders_table`. Сейчас она использует `PythonOperator` и `PostgresHook` внутри Python-функции.
- Замените её на использование стандартного `PostgresOperator`, используя заранее созданный Connection. - Замените её на использование стандартного `PostgresOperator`, используя соединение `postgres_training`.
- Убедитесь, что пайплайн продолжает работать корректно. - Убедитесь, что пайплайн продолжает работать корректно.
**Цель задания:** Научиться использовать специализированные операторы для работы с БД вместо кастомного Python-кода. **Цель задания:** Научиться использовать специализированные операторы для работы с БД вместо кастомного Python-кода.
@@ -167,7 +168,7 @@
**Задача:** **Задача:**
- Добавьте новую функцию проверки прямо в `csv_to_postgres_dq.py`, которая будет убеждаться, что все значения в колонке `amount` строго больше нуля. - Добавьте новую функцию проверки прямо в `csv_to_postgres_dq.py`, которая будет убеждаться, что все значения в колонке `amount` строго больше нуля.
- Добавьте вызов этой функции как новую задачу в DAG `csv_to_postgres_dq`. - Добавьте вызов этой функции как новую задачу в DAG `csv_to_postgres_dq`.
- Встройте новую задачу в общую цепочку выполнения (например, перед `dq_summary`). - Встройте новую задачу в общую цепочку выполнения (например, перед `data_quality_summary`).
**Цель задания:** Научиться расширять набор проверок качества данных. **Цель задания:** Научиться расширять набор проверок качества данных.
@@ -179,7 +180,7 @@
- Смоделируйте ошибку (например, временно измените данные так, чтобы проверки не прошли). - Смоделируйте ошибку (например, временно измените данные так, чтобы проверки не прошли).
- По умолчанию, если падает одна проверка, следующие не выполняются (поведение `all_success`). - По умолчанию, если падает одна проверка, следующие не выполняются (поведение `all_success`).
- Измените параметры задач так (с помощью `trigger_rule`), чтобы выполнялись *все* проверки, даже если некоторые из них упали. - Измените параметры задач так (с помощью `trigger_rule`), чтобы выполнялись *все* проверки, даже если некоторые из них упали.
- Сделайте так, чтобы задача `dq_summary` могла анализировать статусы предыдущих задач и отражать общий итог. - Сделайте так, чтобы задача `data_quality_summary` могла анализировать статусы предыдущих задач и отражать общий итог.
**Цель задания:** Освоить продвинутую маршрутизацию статусов задач с помощью `trigger_rule`. **Цель задания:** Освоить продвинутую маршрутизацию статусов задач с помощью `trigger_rule`.