PostgreSQL
Doris предоставляет следующие способы загрузки данных из PostgreSQL:
- Загрузка данных PostgreSQL через JDBC Catalog
Doris использует JDBC Catalog для представления PostgreSQL в виде внешнего Catalog, что позволяет выполнять SQL-запросы непосредственно к данным PostgreSQL. В сочетании с INSERT INTO или CREATE TABLE AS SELECT этот способ подходит для разовой миграции или периодической пакетной загрузки.
- Непрерывная синхронизация данных PostgreSQL через Streaming Job
Doris использует Streaming Job для непрерывной полной и инкрементальной синхронизации данных из PostgreSQL в Doris. Благодаря интеграции возможностей чтения Flink CDC Doris поддерживает непрерывную работу задания, читает WAL из PostgreSQL и записывает данные в таблицы Doris с семантикой exactly-once. Поддерживаются два режима: SQL Mapping Sync и Auto Table Creation Sync. Доступно начиная с Doris 4.1.0.
- Загрузка данных PostgreSQL через Flink Doris Connector
Используйте Flink Doris Connector вместе с Flink Postgres CDC для синхронизации в реальном времени. Этот способ подходит для сценариев, требующих дополнительной логики потоковой обработки во Flink. Коннектор также предоставляет инструмент для синхронизации всей базы данных одним нажатием. Подробнее см. в разделе Flink Doris Connector.
- Загрузка данных PostgreSQL с помощью сторонних инструментов
Инструменты интеграции данных, такие как DataX, SeaTunnel и CloudCanal, также поддерживают синхронизацию данных из PostgreSQL в Doris.
В большинстве случаев для разовой миграции данных можно напрямую использовать JDBC Catalog. Если требуется непрерывная полная и инкрементальная синхронизация, рекомендуется Streaming Job.
Загрузка данных PostgreSQL через JDBC Catalog
Используйте JDBC Catalog для представления PostgreSQL в виде внешнего Catalog, а затем загружайте данные с помощью INSERT INTO или CREATE TABLE AS SELECT. Подробное описание синтаксиса см. в разделе JDBC PostgreSQL Catalog.
Шаг 1: Подготовка данных в PostgreSQL
CREATE TABLE public.students (
id INT PRIMARY KEY,
name VARCHAR(64),
age INT
);
INSERT INTO public.students VALUES (1, 'Emily', 25), (2, 'Bob', 30);
Шаг 2: Создание Catalog в Doris
CREATE CATALOG pg_catalog PROPERTIES (
"type" = "jdbc",
"user" = "postgres",
"password" = "postgres",
"jdbc_url" = "jdbc:postgresql://127.0.0.1:5432/postgres",
"driver_url" = "postgresql-42.5.1.jar",
"driver_class" = "org.postgresql.Driver"
);
Шаг 3: Создание целевой таблицы в Doris
CREATE DATABASE IF NOT EXISTS doris_db;
CREATE TABLE doris_db.students (
id INT,
name VARCHAR(64),
age INT
)
UNIQUE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");
Шаг 4: Загрузка данных с помощью INSERT INTO
INSERT INTO doris_db.students
SELECT id, name, age FROM pg_catalog.postgres.public.students;
Если целевая таблица ещё не существует, можно также использовать CREATE TABLE AS SELECT, чтобы создать таблицу и загрузить данные за один шаг:
CREATE TABLE doris_db.students
PROPERTIES ("replication_num" = "1")
AS
SELECT * FROM pg_catalog.postgres.public.students;
Шаг 5: Проверка загруженных данных
SELECT * FROM doris_db.students;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | Emily | 25 |
| 2 | Bob | 30 |
+----+-------+------+
Непрерывная синхронизация данных PostgreSQL через Streaming Job
Streaming Job непрерывно читает WAL PostgreSQL через Flink CDC и записывает данные в Doris. Поддерживаются два режима:
- PostgreSQL CDC с автоматическим созданием таблиц: Doris автоматически создаёт целевые таблицы при первой синхронизации (используйте
include_tablesдля синхронизации одной, нескольких или всех таблиц). Обеспечивает семантику at-least-once. - PostgreSQL CDC с сопоставлением через SQL: целевая таблица должна быть заранее создана в Doris. Поддерживает гибкое сопоставление столбцов, преобразование данных и семантику exactly-once.
Ограничения
- Поддерживаются только таблицы с первичным ключом (Unique Key).
- Требуется привилегия Load. Для режима Auto Table Creation Sync также требуется привилегия Create, необходимая для автоматического создания целевых таблиц при первом запуске.
- Доступно начиная с Doris 4.1.0.
Предварительные требования
Перед отправкой задания Streaming Job на стороне PostgreSQL необходимо включить логическую репликацию (wal_level=logical), а пользователю предоставить соответствующие привилегии REPLICATION. Инструкции по настройке для конкретных сред см. в следующих разделах:
- Руководство по настройке Amazon RDS PostgreSQL
- Руководство по настройке Amazon Aurora PostgreSQL
- Примечания и необходимые разрешения для каждого режима см. в разделе Обзор непрерывной загрузки.
Пример использования: Auto Table Creation Sync
Режим Auto Table Creation Sync использует синтаксис FROM POSTGRES ... TO DATABASE .... В качестве целевого объекта выступает база данных Doris, а целевые таблицы автоматически создаются при первой синхронизации.
Шаг 1: Подготовка данных в PostgreSQL
CREATE TABLE public.students (
id INT PRIMARY KEY,
name VARCHAR(64),
age INT
);
INSERT INTO public.students VALUES (1, 'Emily', 25), (2, 'Bob', 30);
Шаг 2: Создание целевой базы данных в Doris
Режим Auto Table Creation Sync не требует предварительного создания таблиц, но целевая база данных, в которой они будут размещены, должна существовать:
CREATE DATABASE IF NOT EXISTS doris_db;
Шаг 3: Создание задания Streaming Job
В приведённом ниже примере параметр include_tables используется для синхронизации только таблицы students (для нескольких таблиц укажите их имена через запятую; для синхронизации всей базы данных оставьте значение пустым):
CREATE JOB pg_db_sync
ON STREAMING
FROM POSTGRES (
"jdbc_url" = "jdbc:postgresql://127.0.0.1:5432/postgres",
"driver_url" = "postgresql-42.5.1.jar",
"driver_class" = "org.postgresql.Driver",
"user" = "postgres",
"password" = "postgres",
"database" = "postgres",
"schema" = "public",
"include_tables" = "students",
"offset" = "initial"
)
TO DATABASE doris_db (
"table.create.properties.replication_num" = "1" -- set to 1 in single-BE deployments
);
Шаг 4: Проверка состояния задания
SELECT * FROM jobs("type"="insert") WHERE ExecuteType = "STREAMING";
Шаг 5: Просмотр автоматически созданных таблиц Doris и загруженных данных
SHOW TABLES FROM doris_db;
SELECT * FROM doris_db.students;
Описание других распространённых операций и полный справочник параметров см. в разделе PostgreSQL CDC с автоматическим созданием таблиц.
Пример использования: SQL Mapping Sync
Шаг 1: Подготовка данных в PostgreSQL
CREATE TABLE public.students (
id INT PRIMARY KEY,
name VARCHAR(64),
age INT
);
INSERT INTO public.students VALUES (1, 'Emily', 25), (2, 'Bob', 30);
Шаг 2: Создание целевой таблицы в Doris
Для режима SQL Mapping Sync целевая таблица должна быть создана заранее:
CREATE DATABASE IF NOT EXISTS doris_db;
CREATE TABLE doris_db.students (
id INT,
name VARCHAR(64),
age INT
)
UNIQUE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");
Шаг 3: Создание задания Streaming Job
Используйте CREATE STREAMING JOB с синтаксисом INSERT INTO ... SELECT * FROM cdc_stream(...):
CREATE JOB pg_students_sync
ON STREAMING
DO
INSERT INTO doris_db.students
SELECT * FROM cdc_stream(
"type" = "postgres",
"jdbc_url" = "jdbc:postgresql://127.0.0.1:5432/postgres",
"driver_url" = "postgresql-42.5.1.jar",
"driver_class" = "org.postgresql.Driver",
"user" = "postgres",
"password" = "postgres",
"database" = "postgres",
"schema" = "public",
"table" = "students",
"offset" = "initial"
);
Шаг 4: Проверка состояния задания
SELECT * FROM jobs("type"="insert") WHERE ExecuteType = "STREAMING";
Шаг 5: Проверка загруженных данных
SELECT * FROM doris_db.students;
Описание других распространённых операций (приостановка, возобновление, удаление, проверка задачи и т. д.) и полный справочник параметров см. в разделе PostgreSQL CDC с сопоставлением через SQL.