Использование коннектора PXF JDBC для чтения и записи данных между Greengage DB и MySQL
Этот пример демонстрирует, как настроить и использовать коннектор PXF JDBC для чтения и записи данных между Greengage DB и MySQL с помощью внешних таблиц.
Для его выполнения убедитесь, что у вас работает и доступен сервер MySQL в дополнение к серверу Greengage DB.
В примере сервер MySQL 8.0 работает на хосте с именем mysqlserver, а кластер Greengage DB состоит из четырех хостов:
-
mdw— мастер-хост; -
smdw— резервный мастер-хост; -
sdw1иsdw2— сегмент-хосты.
Создание исходной таблицы MySQL
-
Подключитесь к хосту MySQL.
-
Настройте MySQL для приема внешних подключений. Откройте файл /etc/mysql/mysql.conf.d/mysqld.cnf в текстовом редакторе и убедитесь, что опция
bind-addressсконфигурирована следующим образом:bind-address = 0.0.0.0 -
Подключитесь к базе данных MySQL по умолчанию как пользователь
root:$ sudo mysql -u root -
Создайте базу данных с именем
customersи подключитесь к ней:CREATE DATABASE customers; USE customers; -
Создайте таблицу с именем
customersи заполните ее данными:CREATE TABLE customers ( id INTEGER, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100), address VARCHAR(255) ); INSERT INTO customers (id, first_name, last_name, email, address) VALUES (1,'John','Doe','john.doe@example.com','123 Elm Street'), (2,'Jane','Smith','jane.smith@example.com','456 Oak Street'), (3,'Bob','Brown','bob.brown@example.com','789 Pine Street'), (4,'Rob','Stuart','rob.stuart@example.com','119 Willow Street'); -
Создайте пользователя MySQL с именем
pxfuser:CREATE USER 'pxfuser' IDENTIFIED BY 'changeme'; -
Выдайте пользователю
pxfuserвсе привилегии на таблицуcustomers, что позволит пользователю читать и записывать данные в таблицу. Затем отключитесь от MySQL:GRANT ALL PRIVILEGES ON customers to 'pxfuser'; \q
Конфигурирование коннектора JDBC MySQL
-
Подключитесь к мастер-хосту Greengage DB как
gpadmin. -
Загрузите драйвер MySQL JDBC из Maven Central и поместите его в каталог $PXF_BASE/lib:
$ cd $PXF_BASE/lib $ curl -O https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.3.0/mysql-connector-j-8.3.0.jar -
Измените текущий каталог на $PXF_BASE/servers и создайте каталог конфигурации сервера JDBC с именем mysql-server:
$ cd $PXF_BASE/servers $ mkdir mysql-server -
Скопируйте файл шаблона конфигурации сервера jdbc-site.xml из каталога $PXF_HOME/templates/ в созданный каталог mysql-server:
$ cp $PXF_HOME/templates/jdbc-site.xml $PXF_BASE/servers/mysql-server -
В файле jdbc-site.xml укажите следующую конфигурацию с помощью параметров
jdbc.driver,jdbc.url,jdbc.userиjdbc.password:<?xml version="1.0" encoding="UTF-8"?> <configuration> <property> <name>jdbc.driver</name> <value>com.mysql.jdbc.Driver</value> <description>Class name of the JDBC driver</description> </property> <property> <name>jdbc.url</name> <value>jdbc:mysql://mysqlserver:3306/customers</value> <description>The URL that the JDBC driver can use to connect to the database</description> </property> <property> <name>jdbc.user</name> <value>pxfuser</value> <description>User name for connecting to the database</description> </property> <property> <name>jdbc.password</name> <value>changeme</value> <description>Password for connecting to the database</description> </property> </configuration> -
Синхронизируйте конфигурацию сервера PXF с кластером Greengage DB:
$ pxf cluster sync
Создание читающей внешней таблицы
-
На мастер-хосте Greengage DB создайте читающую внешнюю таблицу PXF, ссылающуюся на ранее созданную таблицу
customersMySQL. В выраженииLOCATIONукажите удаленную таблицу для подключения (customers), используемый профиль (jdbc) и удаленный MySQL-сервер (mysql-server). В выраженииFORMATукажитеpxfwritable_import— встроенную кастомную функцию форматирования для операций чтения:CREATE EXTERNAL TABLE pxf_customers_r ( id INTEGER, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100), address VARCHAR(255) ) LOCATION ('pxf://customers?PROFILE=jdbc&SERVER=mysql-server') FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import'); -
Выполните запрос к созданной внешней таблице:
SELECT * FROM pxf_customers_r;Вывод должен выглядеть следующим образом:
id | first_name | last_name | email | address ----+------------+-----------+------------------------+------------------- 1 | John | Doe | john.doe@example.com | 123 Elm Street 2 | Jane | Smith | jane.smith@example.com | 456 Oak Street 3 | Bob | Brown | bob.brown@example.com | 789 Pine Street 4 | Rob | Stuart | rob.stuart@example.com | 119 Willow Street (4 rows)
Создание пишущей внешней таблицы
-
На мастер-хосте Greengage DB создайте пишущую внешнюю таблицу PXF, ссылающуюся на ранее созданную таблицу
customersMySQL. В выраженииLOCATIONукажите удаленную таблицу для подключения (customers), используемый профиль (jdbc) и удаленный MySQL-сервер (mysql-server). В выраженииFORMATукажитеpxfwritable_export— встроенную кастомную функцию форматирования для операций записи:CREATE WRITABLE EXTERNAL TABLE pxf_customers_w ( id INTEGER, first_name VARCHAR(50), last_name VARCHAR(50), email VARCHAR(100), address VARCHAR(255) ) LOCATION ('pxf://customers?PROFILE=jdbc&SERVER=mysql-server') FORMAT 'CUSTOM' (FORMATTER='pxfwritable_export'); -
Вставьте данные в таблицу
pxf_customers_w:INSERT INTO pxf_customers_w (id, first_name, last_name, email, address) VALUES (5, 'Alice', 'Johnson', 'alice.johnson@example.com', '101 Maple Avenue'), (6, 'David', 'Williams', 'david.williams@example.com', '222 Cedar Lane'), (7, 'Emily', 'Davis', 'emily.davis@example.com', '333 Birch Road'), (8, 'Michael', 'Wilson', 'michael.wilson@example.com', '444 Pine Court'); -
На сервере MySQL выполните запрос к первоначально созданной таблице
customers, чтобы просмотреть данные:SELECT * FROM customers;Вывод должен выглядеть следующим образом:
+------+------------+-----------+----------------------------+-------------------+ | id | first_name | last_name | email | address | +------+------------+-----------+----------------------------+-------------------+ | 1 | John | Doe | john.doe@example.com | 123 Elm Street | | 2 | Jane | Smith | jane.smith@example.com | 456 Oak Street | | 3 | Bob | Brown | bob.brown@example.com | 789 Pine Street | | 4 | Rob | Stuart | rob.stuart@example.com | 119 Willow Street | | 5 | Alice | Johnson | alice.johnson@example.com | 101 Maple Avenue | | 6 | David | Williams | david.williams@example.com | 222 Cedar Lane | | 7 | Emily | Davis | emily.davis@example.com | 333 Birch Road | | 8 | Michael | Wilson | michael.wilson@example.com | 444 Pine Court | +------+------------+-----------+----------------------------+-------------------+ 8 rows in set (0.00 sec)