Первоначальная реализация PXF (не тестировано)
This commit is contained in:
@@ -1,3 +1,6 @@
|
|||||||
|
# Общие настройки
|
||||||
|
TZ=Europe/Moscow
|
||||||
|
|
||||||
# Airflow Configuration
|
# Airflow Configuration
|
||||||
AIRFLOW_USER=admin
|
AIRFLOW_USER=admin
|
||||||
AIRFLOW_PASSWORD=admin
|
AIRFLOW_PASSWORD=admin
|
||||||
|
|||||||
@@ -42,6 +42,8 @@
|
|||||||
- `SELECT COUNT(*) FROM public.orders;` — оценка объёма.
|
- `SELECT COUNT(*) FROM public.orders;` — оценка объёма.
|
||||||
- `SELECT * FROM public.orders LIMIT 5;` — визуальная проверка.
|
- `SELECT * FROM public.orders LIMIT 5;` — визуальная проверка.
|
||||||
- `SELECT order_id FROM public.orders GROUP BY 1 HAVING COUNT(*) > 1;` — поиск дублей.
|
- `SELECT order_id FROM public.orders GROUP BY 1 HAVING COUNT(*) > 1;` — поиск дублей.
|
||||||
|
- (после настройки PXF) `SELECT COUNT(*) FROM public.ext_bookings_bookings;` — проверка чтения из демо-БД bookings через PXF.
|
||||||
|
- (после настройки PXF) `SELECT * FROM public.ext_bookings_bookings LIMIT 5;` — визуальное сравнение с таблицей `bookings.bookings` в исходной БД.
|
||||||
- Завершить `\q`.
|
- Завершить `\q`.
|
||||||
|
|
||||||
## 6. Негативные сценарии и fallback
|
## 6. Негативные сценарии и fallback
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ services:
|
|||||||
# container_name: gp_pgmeta
|
# container_name: gp_pgmeta
|
||||||
env_file: .env
|
env_file: .env
|
||||||
environment:
|
environment:
|
||||||
|
TZ: ${TZ:-Europe/Moscow}
|
||||||
POSTGRES_USER: ${PG_USER}
|
POSTGRES_USER: ${PG_USER}
|
||||||
POSTGRES_PASSWORD: ${PG_PASSWORD}
|
POSTGRES_PASSWORD: ${PG_PASSWORD}
|
||||||
POSTGRES_DB: ${PG_DB}
|
POSTGRES_DB: ${PG_DB}
|
||||||
@@ -23,6 +24,7 @@ services:
|
|||||||
image: postgres:16
|
image: postgres:16
|
||||||
env_file: .env
|
env_file: .env
|
||||||
environment:
|
environment:
|
||||||
|
TZ: ${TZ:-Europe/Moscow}
|
||||||
POSTGRES_USER: ${BOOKINGS_DB_USER}
|
POSTGRES_USER: ${BOOKINGS_DB_USER}
|
||||||
POSTGRES_PASSWORD: ${BOOKINGS_DB_PASSWORD}
|
POSTGRES_PASSWORD: ${BOOKINGS_DB_PASSWORD}
|
||||||
POSTGRES_DB: ${BOOKINGS_DB_NAME}
|
POSTGRES_DB: ${BOOKINGS_DB_NAME}
|
||||||
@@ -43,15 +45,19 @@ services:
|
|||||||
# container_name: gp_single
|
# container_name: gp_single
|
||||||
# hostname: gpdbsne
|
# hostname: gpdbsne
|
||||||
environment:
|
environment:
|
||||||
|
TZ: ${TZ:-Europe/Moscow}
|
||||||
GREENPLUM_USER: ${GP_USER:-gpadmin}
|
GREENPLUM_USER: ${GP_USER:-gpadmin}
|
||||||
GREENPLUM_PASSWORD: ${GP_PASSWORD:-gpadmin}
|
GREENPLUM_PASSWORD: ${GP_PASSWORD:-gpadmin}
|
||||||
GREENPLUM_DATABASE_NAME: ${GP_DB:-gpadmin}
|
GREENPLUM_DATABASE_NAME: ${GP_DB:-gpadmin}
|
||||||
|
GREENPLUM_PXF_ENABLE: "true"
|
||||||
# GP_PORT: ${GP_PORT:-5432}
|
# GP_PORT: ${GP_PORT:-5432}
|
||||||
# Порты: внешний 5432
|
# Порты: внешний 5432
|
||||||
ports:
|
ports:
|
||||||
- "${GP_PORT}:5432"
|
- "${GP_PORT}:5432"
|
||||||
volumes:
|
volumes:
|
||||||
- ./sql:/sql:ro
|
- ./sql:/sql:ro
|
||||||
|
- ./pxf/postgresql-42.7.3.jar:/data/pxf/lib/postgresql-jdbc.jar:ro
|
||||||
|
- ./pxf/servers/bookings-db/jdbc-site.xml:/data/pxf/servers/bookings-db/jdbc-site.xml:ro
|
||||||
- greenplum_data:/data
|
- greenplum_data:/data
|
||||||
- airflow_data:/opt/airflow/data
|
- airflow_data:/opt/airflow/data
|
||||||
# Простая проверка доступности: psql откликается
|
# Простая проверка доступности: psql откликается
|
||||||
@@ -66,6 +72,7 @@ services:
|
|||||||
container_name: gp_airflow_web
|
container_name: gp_airflow_web
|
||||||
env_file: .env
|
env_file: .env
|
||||||
environment:
|
environment:
|
||||||
|
TZ: ${TZ:-Europe/Moscow}
|
||||||
AIRFLOW__CORE__LOAD_EXAMPLES: "False"
|
AIRFLOW__CORE__LOAD_EXAMPLES: "False"
|
||||||
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${PG_USER}:${PG_PASSWORD}@pgmeta:5432/${PG_DB}
|
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${PG_USER}:${PG_PASSWORD}@pgmeta:5432/${PG_DB}
|
||||||
AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW__WEBSERVER__SECRET_KEY}
|
AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW__WEBSERVER__SECRET_KEY}
|
||||||
@@ -89,6 +96,7 @@ services:
|
|||||||
container_name: gp_airflow_sch
|
container_name: gp_airflow_sch
|
||||||
env_file: .env
|
env_file: .env
|
||||||
environment:
|
environment:
|
||||||
|
TZ: ${TZ:-Europe/Moscow}
|
||||||
AIRFLOW__CORE__LOAD_EXAMPLES: "False"
|
AIRFLOW__CORE__LOAD_EXAMPLES: "False"
|
||||||
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${PG_USER}:${PG_PASSWORD}@pgmeta:5432/${PG_DB}
|
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${PG_USER}:${PG_PASSWORD}@pgmeta:5432/${PG_DB}
|
||||||
AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW__WEBSERVER__SECRET_KEY}
|
AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW__WEBSERVER__SECRET_KEY}
|
||||||
@@ -110,6 +118,7 @@ services:
|
|||||||
# container_name: gp_airflow_init
|
# container_name: gp_airflow_init
|
||||||
env_file: .env
|
env_file: .env
|
||||||
environment:
|
environment:
|
||||||
|
TZ: ${TZ:-Europe/Moscow}
|
||||||
AIRFLOW__CORE__LOAD_EXAMPLES: "False"
|
AIRFLOW__CORE__LOAD_EXAMPLES: "False"
|
||||||
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${PG_USER}:${PG_PASSWORD}@pgmeta:5432/${PG_DB}
|
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: postgresql+psycopg2://${PG_USER}:${PG_PASSWORD}@pgmeta:5432/${PG_DB}
|
||||||
AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW__WEBSERVER__SECRET_KEY}
|
AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW__WEBSERVER__SECRET_KEY}
|
||||||
|
|||||||
Binary file not shown.
@@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
JDBC-конфиг для PXF-сервера bookings-db.
|
||||||
|
Для учебного стенда используем те же дефолтные креды, что и в .env.example:
|
||||||
|
BOOKINGS_DB_USER=bookings, BOOKINGS_DB_PASSWORD=bookings.
|
||||||
|
При изменении этих параметров в .env не забывайте обновить их здесь.
|
||||||
|
-->
|
||||||
|
<configuration>
|
||||||
|
|
||||||
|
<property>
|
||||||
|
<name>jdbc.driver</name>
|
||||||
|
<value>org.postgresql.Driver</value>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property>
|
||||||
|
<name>jdbc.url</name>
|
||||||
|
<value>jdbc:postgresql://bookings-db:5432/demo</value>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property>
|
||||||
|
<name>jdbc.user</name>
|
||||||
|
<value>bookings</value>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property>
|
||||||
|
<name>jdbc.password</name>
|
||||||
|
<value>bookings</value>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
|
||||||
@@ -10,3 +10,13 @@ CREATE TABLE IF NOT EXISTS public.orders (
|
|||||||
)
|
)
|
||||||
WITH (appendonly=true, orientation=row, compresstype=zlib, compresslevel=1)
|
WITH (appendonly=true, orientation=row, compresstype=zlib, compresslevel=1)
|
||||||
DISTRIBUTED BY (order_id);
|
DISTRIBUTED BY (order_id);
|
||||||
|
|
||||||
|
-- Внешняя таблица для чтения данных из демо-БД bookings через PXF (JDBC).
|
||||||
|
-- Источник: таблица bookings.bookings в базе demo (Postgres, сервис bookings-db).
|
||||||
|
CREATE EXTERNAL TABLE IF NOT EXISTS public.ext_bookings_bookings (
|
||||||
|
book_ref CHAR(6),
|
||||||
|
book_date TIMESTAMP WITH TIME ZONE,
|
||||||
|
total_amount NUMERIC(10,2)
|
||||||
|
)
|
||||||
|
LOCATION ('pxf://bookings.bookings?PROFILE=JDBC&SERVER=bookings-db')
|
||||||
|
FORMAT 'CUSTOM' (formatter='pxfwritable_import');
|
||||||
|
|||||||
Reference in New Issue
Block a user