Перейти к содержимому
Последнее обновление

Из PostgreSQL в Doris

В этом руководстве PostgreSQL JDBC Catalog используется для копирования стабильного снимка во внутреннюю таблицу Doris. Этот подход подходит для разовой или плановой пакетной миграции и не распространяет автоматически последующие обновления, удаления или операции DDL. Варианты CDC для непрерывной синхронизации описаны ниже.

Предварительные требования​

  • База данных PostgreSQL с именем migration_source и учётная запись источника с правом SELECT для таблицы из примера.
  • Сетевой доступ к источнику со всех FE/BE Doris. Установите postgresql-42.5.6.jar по инструкциям в разделах PostgreSQL Catalog и развёртывание драйвера. В примере указано имя файла драйвера, поэтому Jar должен находиться в jdbc_drivers_dir на всех узлах FE/BE.
  • Учётная запись Doris с правами на создание каталогов, баз данных и таблиц, чтение внешней таблицы и загрузку данных в целевую таблицу. См. раздел Управление доступом.
  • Выполняйте подготовку источника в migration_source; используйте пустую целевую таблицу. Замените указанные в примере хосты, имя пользователя и пароль.

Базовое использование​

1. Подготовьте исходную таблицу​

Подготовьте этот пример в исходной базе данных, используя учётную запись с правами CREATE и INSERT. Для подключения каталога используется описанная выше учётная запись с правом чтения источника.

CREATE TABLE public.migration_demo (
id BIGINT PRIMARY KEY,
amount DECIMAL(12,2),
note VARCHAR(100)
);
INSERT INTO public.migration_demo VALUES (1, 12.50, 'first'), (2, NULL, NULL);

Результат: создана таблица с 2 строками.

2. Создайте и проверьте каталог в Doris​

CREATE CATALOG migration_pg PROPERTIES (
'type' = 'jdbc',
'user' = 'migration_reader',
'password' = '<source_password>',
'jdbc_url' = 'jdbc:postgresql://pg-host:5432/migration_source',
'driver_url' = 'postgresql-42.5.6.jar',
'driver_class' = 'org.postgresql.Driver'
);
DESC migration_pg.public.migration_demo;

Во внешней схеме должны присутствовать id, amount и note. Перед созданием целевой таблицы проверьте, каким типам они фактически сопоставлены.

3. Создайте целевую таблицу и скопируйте данные​

CREATE DATABASE IF NOT EXISTS migration_target;
CREATE TABLE migration_target.pg_demo (
id BIGINT NOT NULL,
amount DECIMAL(12,2),
note STRING
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ('replication_num' = '1');

INSERT INTO migration_target.pg_demo (id, amount, note)
SELECT id, amount, note FROM migration_pg.public.migration_demo;

SELECT id, amount, note FROM migration_target.pg_demo ORDER BY id;
+------+--------+-------+
| id | amount | note |
+------+--------+-------+
| 1 | 12.50 | first |
| 2 | NULL | NULL |
+------+--------+-------+

Одна реплика и один бакет позволяют использовать пример для локальной проверки. Выбирайте параметры таблиц в рабочей среде с учётом доступных BE и требований к надёжности. Повторное выполнение INSERT добавляет дублирующиеся строки.

Параметры подключения​

ПараметрТипОбязательность / значение по умолчаниюОписание
typeSTRINGОбязателен, без значения по умолчаниюИспользуйте jdbc
user / passwordSTRINGОбязательны, без значения по умолчаниюУчётные данные исходной базы данных
jdbc_urlSTRINGОбязателен, без значения по умолчаниюURL подключения к источнику по JDBC, включая имя базы данных
driver_urlSTRINGОбязателен, без значения по умолчаниюJar, доступный каждому FE/BE; в этом примере используется имя заранее установленного файла
driver_classSTRINGОбязателен, без значения по умолчаниюКласс Java для выбранного драйвера

Сведения о пулах соединений, сопоставлении имён и настройках расположения драйверов см. в полном справочнике по JDBC.

Типы и различия между версиями​

  • JDBC сопоставляет типы PostgreSQL json/jsonb с STRING; автоматического сопоставления с VARIANT нет. Если в целевой таблице используется другой тип, выполните явное преобразование и проверьте результат.
  • В каталоге типы PostgreSQL time, timetz и interval сопоставляются со строковыми типами. Это не означает, что в Doris нет типа TIME.
  • Тип numeric без подходящей точности или выходящий за пределы поддерживаемого диапазона десятичных типов может сопоставляться с STRING. Перед числовыми вычислениями проверьте тип во внешней таблице.
  • В ветке 4.1, начиная с 4.1.5, timestamptz сопоставляется с TIMESTAMPTZ, а для bytea используется VARBINARY; в более ранних версиях сопоставления и настройки отличаются. В Dev используется актуальное сопоставление. Проверьте часовые пояса, точность и побайтовое равенство двоичных данных.
  • Для определения размерности массивов нужны исходные данные; при отсутствии пригодных данных может сообщаться о неподдерживаемом типе. Проверьте каждый столбец по справочнику сопоставлений PostgreSQL.

Непрерывная синхронизация​

Используйте синхронизацию через Flink CDC, если при миграции нужно передать начальный снимок и распространять последующие обновления и удаления. Выбирайте совместимые версии Flink, CDC и Doris Connector по справочнику коннектора, а не на основании разрозненных требований к минимальным версиям.

SinceVersion dev

В Dev также доступен встроенный механизм CDC для PostgreSQL. Этот способ с автоматическим созданием таблиц требует наличия первичных ключей в источнике и в настоящее время обеспечивает семантику at-least-once. Сведения о разрешениях для работы с журналом, ресурсах репликации и мониторинге см. в этом справочнике; не применяйте к этому способу сопоставления типов JDBC, описанные на этой странице.

Проверка и ошибки​

Для одного и того же снимка и ограниченного диапазона выполните COUNT(*), COUNT(amount) и SUM(amount) для исходной таблицы migration_pg.public.migration_demo и целевой таблицы migration_target.pg_demo. В этом примере должны возвращаться значения 2, 1 и 12.50 соответственно. Также проверьте точное совпадение значений в выборке, NULL, точность и часовые пояса. Полную процедуру проверки и переключения см. в обзоре миграции.

При ошибках подключения проверьте сетевой доступ со всех узлов FE/BE, файлы драйверов, права доступа к источнику и ограничения на расположение драйверов. Проверьте результат DESC и выполните явное преобразование для несовместимых типов. После неудачного импорта определите, какие диапазоны были записаны, прежде чем повторять попытку; не повторяйте весь INSERT вслепую.

Рекомендации​

Проверьте окружение на этой небольшой таблице, а затем переносите более крупные объёмы данных пакетами по стабильным ключам или временным диапазонам. Для непрерывной репликации нужна модель целевой таблицы, которая обрабатывает обновления, удаления и повторное применение данных; проектируйте таблицы снимков и постоянно синхронизируемые копии отдельно.