Доработки документации
This commit is contained in:
@@ -7,8 +7,9 @@ Airflow по‑прежнему использует **Postgres** только
|
|||||||
|
|
||||||
## Требования
|
## Требования
|
||||||
- Docker Desktop (Windows/Mac) или Docker Engine 24+ (Linux) с `docker compose v2`.
|
- Docker Desktop (Windows/Mac) или Docker Engine 24+ (Linux) с `docker compose v2`.
|
||||||
- Make (опционально). Если `make` нет — используйте приведённые ниже команды `docker compose` напрямую.
|
- Рекомендуемые среды: Linux, macOS, или Windows через WSL. Чистый Windows работает, но с ограничениями (пути/права, отсутствие `make` по умолчанию).
|
||||||
- Windows: запускайте команды в Git Bash или WSL; PowerShell тоже подойдёт, но для `make` удобнее Git Bash/WSL.
|
- Make (опционально). Если `make` нет — используйте команды `docker compose` из примеров ниже.
|
||||||
|
- Windows: в стандартный Git Bash `make` отсутствует. Для `make` используйте WSL/Chocolatey/Scoop/MSYS2; иначе работайте через `docker compose`.
|
||||||
|
|
||||||
## Что внутри
|
## Что внутри
|
||||||
- **Greenplum** (single node) — `woblerr/greenplum:6.27.1` (локальный стенд для разработки).
|
- **Greenplum** (single node) — `woblerr/greenplum:6.27.1` (локальный стенд для разработки).
|
||||||
@@ -19,13 +20,24 @@ Airflow по‑прежнему использует **Postgres** только
|
|||||||
- **Kafka UI** — автоматически подключается к стендовому брокеру (bootstrap берётся из `KAFKA_BOOTSTRAP` или значения по умолчанию).
|
- **Kafka UI** — автоматически подключается к стендовому брокеру (bootstrap берётся из `KAFKA_BOOTSTRAP` или значения по умолчанию).
|
||||||
- **DDL** `sql/ddl_gp.sql` — создаёт колонночную таблицу `orders` без PRIMARY KEY (AO-таблицы GP6 не поддерживают его), распределённую по `order_id`; контроль дублей реализован в DAG.
|
- **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)
|
Опционально установим `make` (если нужен):
|
||||||
|
|
||||||
|
- Linux (Debian/Ubuntu):
|
||||||
```bash
|
```bash
|
||||||
sudo apt install -y make
|
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
|
```bash
|
||||||
@@ -105,6 +117,22 @@ SELECT count(*) FROM public.orders;
|
|||||||
- Открой Kafka UI: http://localhost:8082 — проверь, что существует топик `orders` и в нём появляются сообщения после запуска DAG.
|
- Открой Kafka UI: http://localhost:8082 — проверь, что существует топик `orders` и в нём появляются сообщения после запуска DAG.
|
||||||
- Если автосоздание топиков в брокере отключено, создай топик вручную через UI перед запуском 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).
|
- `docker-compose.yml` — сервисы Greenplum + Kafka + Airflow + Postgres (metadata).
|
||||||
- `.env.example` — шаблон переменных окружения.
|
- `.env.example` — шаблон переменных окружения.
|
||||||
@@ -137,13 +165,13 @@ SELECT count(*) FROM public.orders;
|
|||||||
|
|
||||||
Внутри контейнеров Airflow хост для подключения к БД — `greenplum` (см. `GP_HOST`), а с вашей машины — `localhost:${GP_PORT}`. Созданный в Airflow Connection реиспользует те же значения, что и `.env`.
|
Внутри контейнеров 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`.
|
- Зафиксируй digest образа `woblerr/greenplum:6.27.1` (Docker Hub → Tag → «Copy digest») и замени тег на `@sha256:...` в `docker-compose.yml`.
|
||||||
- Альтернативы: можно использовать другие образы Greenplum или собрать собственный образ для GPDB 6/7.
|
- Альтернативы: можно использовать другие образы Greenplum или собрать собственный образ для GPDB 6/7.
|
||||||
- Особенность GPDB 6: в нём **нет** `INSERT ... ON CONFLICT`. В DAG используется безопасная для GP6 конструкция `INSERT ... WHERE NOT EXISTS` внутри транзакции.
|
- Особенность GPDB 6: в нём **нет** `INSERT ... ON CONFLICT`. В DAG используется безопасная для GP6 конструкция `INSERT ... WHERE NOT EXISTS` внутри транзакции.
|
||||||
|
|
||||||
## Ограничения и заметки
|
## Ограничения и заметки
|
||||||
- Этот стенд — учебный. Для высокой надёжности и производительности Greenplum обычно разворачивают кластерами на нескольких узлах, на裸‑железе/VM с отдельными дисками под сегменты.
|
- Этот стенд — учебный. Для высокой надёжности и производительности Greenplum обычно разворачивают кластерами на нескольких узлах, на железе/VM с отдельными дисками под сегменты.
|
||||||
- Для GP7 (основан на новее PostgreSQL) можно упростить загрузку, включая `ON CONFLICT`. В учебных целях мы остались на широко доступном GP6 образе.
|
- Для GP7 (основан на новее PostgreSQL) можно упростить загрузку, включая `ON CONFLICT`. В учебных целях мы остались на широко доступном GP6 образе.
|
||||||
|
|
||||||
## Поток данных (DAG)
|
## Поток данных (DAG)
|
||||||
|
|||||||
Reference in New Issue
Block a user