Миграция из 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 добавит дублирующиеся строки.
Параметры подключения
| Параметр | Тип | Обязательность / значение по умолчанию | Описание |
|---|---|---|---|
type | STRING | Обязательный, без значения по умолчанию | Используйте jdbc |
user / password | STRING | Обязательные, без значения по умолчанию | Учётные данные исходной базы данных |
jdbc_url | STRING | Обязательный, без значения по умолчанию | URL подключения JDBC к исходной базе данных, включая её имя |
driver_url | STRING | Обязательный, без значения по умолчанию | Файл Jar, доступный всем FE/BE; в этом примере используется имя предварительно установленного файла |
driver_class | STRING | Обязательный, без значения по умолчанию | Класс 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 по справочнику коннектора, а не комбинируйте версии на основании отдельных указаний минимальных требований.
Проверка и ошибки
Для одного и того же снимка и ограниченного диапазона данных выполните COUNT(*), COUNT(amount) и SUM(amount) в исходной таблице migration_pg.public.migration_demo и целевой таблице migration_target.pg_demo. В этом примере должны возвращаться соответственно 2, 1 и 12.50. Также проверьте точные значения в выборке, NULL, точность и часовые пояса. Полная процедура проверки и переключения описана в разделе Обзор миграции.
При сбоях подключения проверьте доступность исходной базы данных со всех узлов FE/BE, файлы драйверов, права доступа к исходной базе данных и ограничения на расположение драйверов. Изучите вывод DESC и выполните явное преобразование несовместимых типов. После неудачного импорта перед повторной попыткой выясните, какие диапазоны уже были записаны; не повторяйте весь INSERT вслепую.
Рекомендации
Проверьте окружение с помощью этой небольшой таблицы, затем выполняйте крупные миграции пакетами по стабильным ключам или временным диапазонам. Для непрерывной репликации нужна модель хранения в целевой системе, которая поддерживает обновления, удаления и повторное применение операций; проектируйте таблицы снимков и постоянно синхронизируемые копии отдельно.