Привет, Я DocuDroid!
Оценка ИИ поиска
Спасибо за оценку нашего ИИ поиска!
Мы будем признательны, если вы поделитесь своими впечатлениями, чтобы мы могли улучшить наш ИИ поиск для вас и других читателей.
GitHub

Использование коннектора PXF JDBC для чтения и записи данных между Greengage DB и MySQL

Антон Монаков

Этот пример демонстрирует, как настроить и использовать коннектор PXF JDBC для чтения и записи данных между Greengage DB и MySQL с помощью внешних таблиц. Для его выполнения убедитесь, что у вас работает и доступен сервер MySQL в дополнение к серверу Greengage DB. В примере сервер MySQL 8.0 работает на хосте с именем mysqlserver, а кластер Greengage DB состоит из четырех хостов:

  • mdw — мастер-хост;

  • smdw — резервный мастер-хост;

  • sdw1 и sdw2 — сегмент-хосты.

Создание исходной таблицы MySQL

  1. Подключитесь к хосту MySQL.

  2. Настройте MySQL для приема внешних подключений. Откройте файл /etc/mysql/mysql.conf.d/mysqld.cnf в текстовом редакторе и убедитесь, что опция bind-address сконфигурирована следующим образом:

    bind-address = 0.0.0.0
  3. Подключитесь к базе данных MySQL по умолчанию как пользователь root:

    $ sudo mysql -u root
  4. Создайте базу данных с именем customers и подключитесь к ней:

    CREATE DATABASE customers;
    USE customers;
  5. Создайте таблицу с именем 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');
  6. Создайте пользователя MySQL с именем pxfuser:

    CREATE USER 'pxfuser' IDENTIFIED BY 'changeme';
  7. Выдайте пользователю pxfuser все привилегии на таблицу customers, что позволит пользователю читать и записывать данные в таблицу. Затем отключитесь от MySQL:

    GRANT ALL PRIVILEGES ON customers to 'pxfuser';
    \q

Конфигурирование коннектора JDBC MySQL

  1. Подключитесь к мастер-хосту Greengage DB как gpadmin.

  2. Загрузите драйвер 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
  3. Измените текущий каталог на $PXF_BASE/servers и создайте каталог конфигурации сервера JDBC с именем mysql-server:

    $ cd $PXF_BASE/servers
    $ mkdir mysql-server
  4. Скопируйте файл шаблона конфигурации сервера jdbc-site.xml из каталога $PXF_HOME/templates/ в созданный каталог mysql-server:

    $ cp $PXF_HOME/templates/jdbc-site.xml $PXF_BASE/servers/mysql-server
  5. В файле 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>
  6. Синхронизируйте конфигурацию сервера PXF с кластером Greengage DB:

    $ pxf cluster sync

Создание читающей внешней таблицы

  1. На мастер-хосте Greengage DB создайте читающую внешнюю таблицу PXF, ссылающуюся на ранее созданную таблицу customers MySQL. В выражении 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');
  2. Выполните запрос к созданной внешней таблице:

    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)

Создание пишущей внешней таблицы

  1. На мастер-хосте Greengage DB создайте пишущую внешнюю таблицу PXF, ссылающуюся на ранее созданную таблицу customers MySQL. В выражении 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');
  2. Вставьте данные в таблицу 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');
  3. На сервере 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)