Примеры использования ADB to ADB Connector
В статье показаны примеры чтения и записи данных между двумя кластерами ADB с использованием ADB to ADB Connector. При выполнении примера соблюдены следующие условия:
-
Локальный кластер ADB развернут согласно руководству Online-установка.
-
Удаленный кластер ADB развернут согласно руководству Online-установка. Мастер-хост кластера — bds-mdw-ext.
-
База данных с именем
adb
существует в обоих кластерах. -
Пользователь с именем
adb_to_adb
и паролем123
создан в БД удаленного кластера. -
Для пользователя
adb_to_adb
настроен доступ к базе данныхadb
в удаленном кластере с мастер-хоста локального кластера. Для этой цели отредактирован файл pg_hba.conf согласно руководству Настройка ADB to ADB connector:host all adb_to_adb 10.92.17.84/32 password
где
10.92.17.84/32
— адрес мастер-хоста локального кластера ADB (с подсетью). -
ADB to ADB Connector установлен на стороне локального и удаленного кластеров согласно статье Установка ADB to ADB connector.
Чтение данных
Чтобы проверить чтение данных из удаленного кластера в локальный кластер ADB, выполните следующие шаги:
-
Подключитесь к базе данных
adb
удаленного кластера ADB под пользователемgpadmin
(например, через psql) и создайте таблицуauthor
:CREATE TABLE author(id INT NOT NULL, name TEXT NOT NULL) WITH (appendoptimized=true) DISTRIBUTED BY(id);
-
Добавьте данные в таблицу
author
на стороне удаленного кластера:INSERT INTO author(id, name) VALUES (1,'Virginia Woolf'), (2,'J.R.R. Tolkien'), (3,'Harper Lee'), (4,'J.D. Salinger'), (5,'George Orwell'), (6,'John Steinbeck'), (7,'Margaret Mitchell'), (8,'Alan Moore'), (9,'Jack Kerouac'), (10,'Ernest Hemingway');
-
Предоставьте необходимые права пользователю
adb_to_adb
на доступ к новой таблицеauthor
(на стороне удаленного кластера):GRANT SELECT, INSERT ON public.author TO adb_to_adb;
-
Подключитесь к базе данных
adb
локального кластера ADB под пользователемgpadmin
(например, через psql) и последовательно создайте следующие объекты:-
Сервер
test_server
:CREATE SERVER test_server FOREIGN DATA WRAPPER adb_fdw OPTIONS ( host 'bds-mdw-ext', port '5432', dbname 'adb', use_remote_estimate 'true');
-
User mapping для пользователя
gpadmin
:CREATE USER MAPPING FOR gpadmin SERVER test_server OPTIONS (user 'adb_to_adb', password '123');
-
Foreign-таблица
test_table
:CREATE FOREIGN TABLE test_table (id INT, name TEXT) SERVER test_server OPTIONS (table_name 'author');
-
-
Выполните выборку данных из таблицы
test_table
. Убедитесь, что данные, добавленные на стороне удаленного кластера, доступны для чтения в локальном кластере:SELECT * FROM test_table ORDER BY id;
Результат:
id | name ----+------------------- 1 | Virginia Woolf 2 | J.R.R. Tolkien 3 | Harper Lee 4 | J.D. Salinger 5 | George Orwell 6 | John Steinbeck 7 | Margaret Mitchell 8 | Alan Moore 9 | Jack Kerouac 10 | Ernest Hemingway (10 rows)
Запись данных
Чтобы проверить запись данных из локального в удаленный кластер ADB, выполните следующие шаги:
-
Выполните шаги 1-4, приведенные выше (если они не были пройдены ранее).
-
Подключитесь к базе данных
adb
локального кластера ADB под пользователемgpadmin
(например, через psql) и добавьте данные в foreign-таблицуtest_table
:INSERT INTO test_table(id, name) VALUES (11, 'Fyodor Dostoevsky'), (12, 'Alexander Pushkin'), (13, 'Mikhail Bulgakov');
-
Подключитесь к базе данных
adb
удаленного кластера ADB под пользователемgpadmin
(например, через psql) и проверьте наличие новых кортежей в таблицеauthor
:SELECT * FROM author ORDER BY id;
Результат содержит новые данные, пришедшие из исходного кластера ADB:
id | name ----+------------------- 1 | Virginia Woolf 2 | J.R.R. Tolkien 3 | Harper Lee 4 | J.D. Salinger 5 | George Orwell 6 | John Steinbeck 7 | Margaret Mitchell 8 | Alan Moore 9 | Jack Kerouac 10 | Ernest Hemingway 11 | Fyodor Dostoevsky 12 | Alexander Pushkin 13 | Mikhail Bulgakov (13 rows)