From 025305acaaea916678254e3e007415e8762e4e6d Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sun, 12 Oct 2025 21:52:07 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- airflow-greenplum/README.md | 46 +++++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/airflow-greenplum/README.md b/airflow-greenplum/README.md index d13cbc8..b869e43 100644 --- a/airflow-greenplum/README.md +++ b/airflow-greenplum/README.md @@ -7,8 +7,9 @@ Airflow по‑прежнему использует **Postgres** только ## Требования - Docker Desktop (Windows/Mac) или Docker Engine 24+ (Linux) с `docker compose v2`. -- Make (опционально). Если `make` нет — используйте приведённые ниже команды `docker compose` напрямую. -- Windows: запускайте команды в Git Bash или WSL; PowerShell тоже подойдёт, но для `make` удобнее Git Bash/WSL. +- Рекомендуемые среды: Linux, macOS, или Windows через WSL. Чистый Windows работает, но с ограничениями (пути/права, отсутствие `make` по умолчанию). +- Make (опционально). Если `make` нет — используйте команды `docker compose` из примеров ниже. +- Windows: в стандартный Git Bash `make` отсутствует. Для `make` используйте WSL/Chocolatey/Scoop/MSYS2; иначе работайте через `docker compose`. ## Что внутри - **Greenplum** (single node) — `woblerr/greenplum:6.27.1` (локальный стенд для разработки). @@ -19,13 +20,24 @@ Airflow по‑прежнему использует **Postgres** только - **Kafka UI** — автоматически подключается к стендовому брокеру (bootstrap берётся из `KAFKA_BOOTSTRAP` или значения по умолчанию). - **DDL** `sql/ddl_gp.sql` — создаёт колонночную таблицу `orders` без PRIMARY KEY (AO-таблицы GP6 не поддерживают его), распределённую по `order_id`; контроль дублей реализован в DAG. -> Примечание по версиям и надёжности: используется образ `woblerr/greenplum:6.27.1` с поддержкой переменных окружения и fallback значениями. Для продакшен‑подобных тестов зафиксируй digest (SHA256) конкретного тега на Docker Hub. +> Примечание по версиям и надёжности: используется образ `woblerr/greenplum:6.27.1` с поддержкой переменных окружения и fallback значениями. ## Быстрый старт -Установим make (Linux/Mac) -```bash -sudo apt install -y make -``` +Опционально установим `make` (если нужен): + +- Linux (Debian/Ubuntu): + ```bash + sudo apt update && sudo apt install -y make + ``` +- macOS (Homebrew): + ```bash + brew install make + ``` +- Windows варианты: + - WSL (Ubuntu): `sudo apt install -y make` + - Chocolatey: `choco install make` + - Scoop: `scoop install make` + - MSYS2: `pacman -S make` Настроим переменные окружения ```bash @@ -105,6 +117,22 @@ SELECT count(*) FROM public.orders; - Открой Kafka UI: http://localhost:8082 — проверь, что существует топик `orders` и в нём появляются сообщения после запуска DAG. - Если автосоздание топиков в брокере отключено, создай топик вручную через UI перед запуском DAG. +**Подключение К Greenplum** +- DBeaver (PostgreSQL/Greenplum драйвер): + - Запусти DBeaver → Database → New Connection → выбери `Greenplum`. + - Host: `localhost` + - Port: `5432` (или значение из `GP_PORT`) + - Database: `gpadmin` (или `GP_DB`) + - Username: `gpadmin` (или `GP_USER`) + - Password: `gpadmin` (или `GP_PASSWORD`) + - SSL: Disabled (для локального стенда) + - Нажми Test Connection → Finish. +- psql внутри контейнера (rootless доступ к встроенному psql): + - Команда Make: `make gp-psql` + - Или напрямую: `docker compose -f docker-compose.yml exec greenplum bash -c "su - gpadmin -c '/usr/local/greenplum-db/bin/psql -p 5432 -d gpadmin'"` + - Примеры команд внутри psql: +`\dt`, `SELECT version()`, `SELECT count(*) FROM public.orders;` + ## Файлы - `docker-compose.yml` — сервисы Greenplum + Kafka + Airflow + Postgres (metadata). - `.env.example` — шаблон переменных окружения. @@ -137,13 +165,13 @@ SELECT count(*) FROM public.orders; Внутри контейнеров Airflow хост для подключения к БД — `greenplum` (см. `GP_HOST`), а с вашей машины — `localhost:${GP_PORT}`. Созданный в Airflow Connection реиспользует те же значения, что и `.env`. -## Пинning и альтернативы +## Фиксация образов (pinning) и альтернативы - Зафиксируй digest образа `woblerr/greenplum:6.27.1` (Docker Hub → Tag → «Copy digest») и замени тег на `@sha256:...` в `docker-compose.yml`. - Альтернативы: можно использовать другие образы Greenplum или собрать собственный образ для GPDB 6/7. - Особенность GPDB 6: в нём **нет** `INSERT ... ON CONFLICT`. В DAG используется безопасная для GP6 конструкция `INSERT ... WHERE NOT EXISTS` внутри транзакции. ## Ограничения и заметки -- Этот стенд — учебный. Для высокой надёжности и производительности Greenplum обычно разворачивают кластерами на нескольких узлах, на裸‑железе/VM с отдельными дисками под сегменты. +- Этот стенд — учебный. Для высокой надёжности и производительности Greenplum обычно разворачивают кластерами на нескольких узлах, на железе/VM с отдельными дисками под сегменты. - Для GP7 (основан на новее PostgreSQL) можно упростить загрузку, включая `ON CONFLICT`. В учебных целях мы остались на широко доступном GP6 образе. ## Поток данных (DAG)