Обзор миграции
Apache Doris поддерживает миграцию через внешние каталоги, инструменты CDC и загрузку файлов. При копировании данных таблиц не переносятся транзакции, индексы, ограничения, процедуры и права доступа исходной системы, а также семантика SQL. Сначала определите, нужен ли вам разовый снимок данных или непрерывная передача обновлений и удалений.
Способы миграции
| Источник | Разовая или пакетная миграция | Непрерывная синхронизация |
|---|---|---|
| PostgreSQL | PostgreSQL JDBC Catalog + INSERT INTO ... SELECT | Flink CDC; в dev также доступны встроенные Streaming Jobs |
| MySQL | MySQL JDBC Catalog + INSERT INTO ... SELECT | Flink CDC; в dev также доступны встроенные Streaming Jobs |
| Elasticsearch | ES Catalog + INSERT INTO ... SELECT | Отдельно спроектируйте захват изменений, применение обновлений и обработку удалений |
| ClickHouse / Greenplum | Соответствующий JDBC Catalog или загрузка файлов | Зависит от исходной системы |
| Hive / Iceberg / Hudi | Соответствующий каталог lakehouse + INSERT INTO ... SELECT | Пакетная загрузка по расписанию или подходящий коннектор |
Каталог позволяет выполнять запросы к внешним данным; его создание не копирует данные во внутренние таблицы Doris. Пакетная операция INSERT INTO ... SELECT не обеспечивает непрерывный захват последующих обновлений или удалений.
Основной порядок действий
- Проверьте доступность соединения с каждого FE/BE, развёртывание драйверов, права на чтение исходных данных и права в Doris на создание каталогов и таблиц и загрузку данных.
- Обеспечьте стабильный снимок исходных данных или период без операций записи. Запросы через каталог к разным таблицам или в рамках разных пакетов не образуют глобально согласованный снимок автоматически.
- Проверьте фактическое сопоставление типов с помощью
DESC catalog.database.tableи спроектируйте целевую таблицу, выбрав подходящую модель данных. Не копируйте напрямую ключи, движки или индексы исходной системы. - Выполните небольшую пробную миграцию. Руководства по MySQL и PostgreSQL содержат воспроизводимые примеры создания таблиц, импорта и результатов запросов.
- Импортируйте данные в заданных диапазонах ключей или времени, фиксируйте завершённые диапазоны и позиции CDC, проверяйте результат, а затем переключайте трафик чтения.
Настройки и типы
| Параметр | Что проверить |
|---|---|
| Catalog | Драйверы, адреса подключения, аутентификацию и настройки расположения драйверов; см. JDBC Catalog или ES Catalog |
| Целевая таблица | Модель ключей, партиции, бакеты, реплики и порядок применения обновлений |
| Сопоставление типов | Сопоставление зависит от способа импорта, драйвера и версии Doris; сопоставления типов JDBC отличаются от сопоставлений CDC |
| Временные и двоичные данные | Проверьте часовые пояса, микросекундную точность и сохранность байтов. Некоторые сопоставления типов JDBC изменились в 4.1.5; используйте справочную документацию для развёрнутой версии |
| Инкрементальная синхронизация | Переход от снимка к чтению с позиции в журнале, первичные ключи, повторное применение, обновления и удаления |
Проверка и переключение
Для одного и того же снимка исходных данных и заданного диапазона сравните количество строк, уникальные ключи, количество значений NULL, суммы числовых значений, а также минимумы и максимумы. Выборочно проверьте точные значения временных меток, десятичных чисел, двоичных данных, массивов и столбцов с полуструктурированными данными. Само по себе совпадение количества строк не подтверждает корректность.
При непрерывной синхронизации проверьте вставки, обновления и удаления, а также задержку синхронизации и поведение при перезапуске. Переключайте чтение в приложении только после проверки, сохраняя исходные данные и возможность отката.
Ошибки и особенности
- Повторное выполнение пакетного INSERT может привести к дублированию строк, особенно в таблицах Duplicate Key. Перед возобновлением определите стратегию повторного применения. Таблица Unique Key не удаляет автоматически строки, удалённые в источнике.
- Изменения в источнике во время выполнения нескольких пакетов могут привести к пропускам или дублированию данных. Используйте согласованный снимок, период без операций записи или надёжный переход к CDC.
- При неподдерживаемых типах, различиях в регистре или изменениях точности проверьте внешнюю таблицу с помощью
DESC, выполните явное преобразование и повторите проверку. Не исключайте несовместимые столбцы без явного указания. - Синхронный INSERT, асинхронные задания загрузки, Flink и Streaming Jobs используют разные интерфейсы проверки состояния. Следуйте справочной документации по соответствующему способу загрузки, а не полагайтесь на
SHOW LOADдля всех способов.
Рекомендации
Начните с небольших репрезентативных таблиц, затем подберите размер пакетов и степень параллелизма с учётом измеренного объёма данных, нагрузки от запросов и доступных ресурсов. Перед переключением проверьте результаты запросов и семантику обновлений, а также сохраняйте сведения о завершённых диапазонах и результаты проверок.