diff --git a/README.md b/README.md index 74287ac..2aa1d9a 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,16 @@ make gp-psql # Подключение к Greenplum ### Настройка подключения к Greenplum в Airflow -По умолчанию DAG использует переменные окружения, но вы можете создать Airflow Connection: +По умолчанию готовые DAG используют Airflow Connections. В docker-compose они +заводятся автоматически через переменные окружения: + +- `AIRFLOW_CONN_GREENPLUM_CONN` — подключение к Greenplum с `conn_id=greenplum_conn`; +- `AIRFLOW_CONN_BOOKINGS_DB` — подключение к демо-БД bookings с `conn_id=bookings_db`. + +Такие подключения подхватываются из окружения и могут не отображаться в UI, +но для DAG это нормально — `PostgresOperator` найдёт их по `conn_id`. + +При желании вы можете создать или отредактировать подключение вручную в UI: 1. Airflow UI → **Admin → Connections → Add a new record** 2. Заполните поля: @@ -364,7 +373,7 @@ load_bookings_to_stg = PostgresOperator( | Greenplum не стартует/падает при старте | Выполните `make down`, затем `make up` (очищает тома и поднимает заново, включая авто‑инициализацию Airflow) | | DAG `bookings_to_gp_stage` падает на внешней таблице/подключении к bookings | Убедитесь, что запущен контейнер `bookings-db` (`docker compose ps`, при необходимости `docker compose start bookings-db`), и выполнены `make bookings-init` и `make ddl-gp` или DAG `bookings_stg_ddl` | | DAG `bookings_to_gp_stage` ругается на отсутствующие таблицы stg | Запустите DAG `bookings_stg_ddl` (или выполните `make ddl-gp`), затем повторите запуск | -| DAG не видит Greenplum/DEMObase по Airflow Connections | Проверьте, что в Airflow созданы подключения `greenplum_conn` и `bookings_db` с параметрами из раздела «Настройка подключения к Greenplum в Airflow» и блока про bookings | +| DAG не видит Greenplum/DEMObase по Airflow Connections | Убедитесь, что контейнеры `greenplum` и `bookings-db` запущены (`docker compose ps`). Подключения `greenplum_conn` и `bookings_db` задаются через переменные окружения `AIRFLOW_CONN_...` и могут не отображаться в UI, но `PostgresOperator` всё равно найдёт их по `conn_id`. При необходимости вы можете создать/отредактировать их вручную в разделе Connections. | --- diff --git a/TESTING.md b/TESTING.md index 1de3db4..24460f4 100644 --- a/TESTING.md +++ b/TESTING.md @@ -25,12 +25,14 @@ ## 4. Smoke тесты DAG в Airflow UI 1. Открыть http://localhost:8080 (admin/admin). -2. DAG `csv_to_greenplum`: +2. (опционально) Зайти в Admin → Connections и убедиться, что DAG’и видят подключения: + - `greenplum_conn` и `bookings_db` задаются через переменные `AIRFLOW_CONN_...` в docker-compose и могут не отображаться в списке, но `airflow connections get greenplum_conn` / `bookings_db` внутри контейнера должны отрабатывать без ошибок. +3. DAG `csv_to_greenplum`: - Включить переключатель. - Нажать «Trigger DAG». - Контроль: все таски Success, в `data/` появился CSV, в логах `load_csv_to_greenplum` видно `INSERT`. - В Greenplum (см. п.5) убедиться в наличии строк `(SELECT COUNT(*) ...)`. -3. DAG `csv_to_greenplum_dq`: +4. DAG `csv_to_greenplum_dq`: - Запустить вручную после первого DAG. - Проверить, что все 5 задач Success и логи содержат `Проверка пройдена`. diff --git a/docker-compose.yml b/docker-compose.yml index 7b23dcb..c14804f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -76,8 +76,8 @@ services: AIRFLOW__CORE__LOAD_EXAMPLES: "False" AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${PG_USER}:${PG_PASSWORD}@pgmeta:5432/${PG_DB} AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW__WEBSERVER__SECRET_KEY} - AIRFLOW_CONN_GREENPLUM_CONN: postgresql+psycopg2://${GP_USER}:${GP_PASSWORD}@greenplum:${GP_PORT:-5432}/${GP_DB} - AIRFLOW_CONN_BOOKINGS_DB: postgresql+psycopg2://${BOOKINGS_DB_USER}:${BOOKINGS_DB_PASSWORD}@bookings-db:5432/demo + AIRFLOW_CONN_GREENPLUM_CONN: postgresql://${GP_USER}:${GP_PASSWORD}@greenplum:${GP_PORT:-5432}/${GP_DB} + AIRFLOW_CONN_BOOKINGS_DB: postgresql://${BOOKINGS_DB_USER}:${BOOKINGS_DB_PASSWORD}@bookings-db:5432/demo command: > bash -lc "pip install --no-cache-dir -r /opt/airflow/requirements.txt && airflow webserver" @@ -103,8 +103,8 @@ services: AIRFLOW__CORE__LOAD_EXAMPLES: "False" AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${PG_USER}:${PG_PASSWORD}@pgmeta:5432/${PG_DB} AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW__WEBSERVER__SECRET_KEY} - AIRFLOW_CONN_GREENPLUM_CONN: postgresql+psycopg2://${GP_USER}:${GP_PASSWORD}@greenplum:${GP_PORT:-5432}/${GP_DB} - AIRFLOW_CONN_BOOKINGS_DB: postgresql+psycopg2://${BOOKINGS_DB_USER}:${BOOKINGS_DB_PASSWORD}@bookings-db:5432/demo + AIRFLOW_CONN_GREENPLUM_CONN: postgresql://${GP_USER}:${GP_PASSWORD}@greenplum:${GP_PORT:-5432}/${GP_DB} + AIRFLOW_CONN_BOOKINGS_DB: postgresql://${BOOKINGS_DB_USER}:${BOOKINGS_DB_PASSWORD}@bookings-db:5432/demo command: > bash -lc "pip install --no-cache-dir -r /opt/airflow/requirements.txt && airflow scheduler" @@ -128,8 +128,8 @@ services: AIRFLOW__CORE__LOAD_EXAMPLES: "False" AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${PG_USER}:${PG_PASSWORD}@pgmeta:5432/${PG_DB} AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW__WEBSERVER__SECRET_KEY} - AIRFLOW_CONN_GREENPLUM_CONN: postgresql+psycopg2://${GP_USER}:${GP_PASSWORD}@greenplum:${GP_PORT:-5432}/${GP_DB} - AIRFLOW_CONN_BOOKINGS_DB: postgresql+psycopg2://${BOOKINGS_DB_USER}:${BOOKINGS_DB_PASSWORD}@bookings-db:5432/demo + AIRFLOW_CONN_GREENPLUM_CONN: postgresql://${GP_USER}:${GP_PASSWORD}@greenplum:${GP_PORT:-5432}/${GP_DB} + AIRFLOW_CONN_BOOKINGS_DB: postgresql://${BOOKINGS_DB_USER}:${BOOKINGS_DB_PASSWORD}@bookings-db:5432/demo volumes: - ./airflow/dags:/opt/airflow/dags - ./airflow/requirements.txt:/opt/airflow/requirements.txt diff --git a/docs/internal/bookings_stg_readme.md b/docs/internal/bookings_stg_readme.md index 55e76de..d544c09 100644 --- a/docs/internal/bookings_stg_readme.md +++ b/docs/internal/bookings_stg_readme.md @@ -24,8 +24,11 @@ _Внутренний файл, чтобы не забыть договорён - учебный вариант: запустить DAG `bookings_stg_ddl` (он использует `sql/stg/bookings_ddl.sql`); - технический шорткат: `make ddl-gp` применяет все DDL разом вручную. Команда сама не вызывается при старте контейнеров, её нужно запустить явно. - В Airflow есть коннекты: - - `greenplum_conn` (по умолчанию уже используется в helpers/greenplum.py); - - `bookings_db` (Postgres к сервису `bookings-db`, если не хочется полагаться на ENV). + - `greenplum_conn` — к Greenplum; + - `bookings_db` — к сервису `bookings-db`. + По умолчанию они задаются через переменные окружения `AIRFLOW_CONN_...` в docker-compose, + поэтому могут не отображаться в UI, но `PostgresOperator` найдёт их по `conn_id`. При желании + их можно создать/отредактировать вручную через Admin → Connections. ## 3. Последовательность задач в DAG