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

Из Elasticsearch в Doris

Используйте ES Catalog для запросов к индексам Elasticsearch, затем копируйте выбранные столбцы во внутренние таблицы Doris с помощью INSERT INTO ... SELECT. В этом примере выполняется небольшая разовая миграция, при которой последующие обновления и удаления не переносятся непрерывно. Для поисковых нагрузок также необходимо отдельно проверить анализаторы, оценку релевантности, вложенные объекты и семантику запросов.

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

В этом примере используется API маппинга без типов в Elasticsearch 7.x или 8.x. Для других версий источника адаптируйте настройку индекса и проверьте диапазон версий, поддерживаемых каталогом.

  • Доступный кластер Elasticsearch и учётная запись с правами на создание тестового индекса, запись в него и чтение из него. Учётной записи для миграции в производственной среде также нужны права доступа к метаданным каталога; см. ES Catalog.
  • Сетевой доступ к ES с каждого FE/BE Doris и учётная запись Doris с правами на создание каталогов/баз данных/таблиц, чтение внешних таблиц и загрузку данных в целевую таблицу.
  • Пустая целевая таблица. Замените адреса подключений и учётные данные. Одна реплика и один бакет используются только для упрощения примера.

Основы использования​

1. Подготовьте исходный индекс​

Выполните в Elasticsearch Dev Tools или аналогичном HTTP-клиенте:

PUT /migration_demo
{
"mappings": {
"properties": {
"title": { "type": "keyword" }
}
}
}

PUT /migration_demo/_doc/one?refresh=true
{ "title": "first" }

PUT /migration_demo/_doc/two?refresh=true
{ "title": "second" }

Ожидаемый результат: индекс содержит два доступных для поиска документа с идентификаторами one и two.

2. Создайте каталог и сохраните идентификаторы документов​

CREATE CATALOG migration_es PROPERTIES (
'type' = 'es',
'hosts' = 'http://es-host:9200',
'user' = '<es_user>',
'password' = '<es_password>',
'mapping_es_id' = 'true'
);
DESC migration_es.default_db.migration_demo;

CREATE DATABASE IF NOT EXISTS migration_target;
CREATE TABLE migration_target.es_demo (
doc_id VARCHAR(512),
title STRING
)
DUPLICATE KEY(doc_id)
DISTRIBUTED BY HASH(doc_id) BUCKETS 1
PROPERTIES ('replication_num' = '1');

INSERT INTO migration_target.es_demo (doc_id, title)
SELECT _id, title FROM migration_es.default_db.migration_demo;

SELECT doc_id, title FROM migration_target.es_demo ORDER BY doc_id;
+--------+--------+
| doc_id | title |
+--------+--------+
| one | first |
| two | second |
+--------+--------+

Справочник параметров​

ПараметрТипОбязательныйПо умолчаниюОписание
hostsSTRINGДаНетHTTP-адреса ES, доступные с каждого FE/BE
user / passwordSTRINGЗависит от аутентификации ESПустое значениеУчётные данные при включённой аутентификации Basic
mapping_es_idbooleanНетfalseПредоставляет доступ к _id документа; включён в этом примере
enable_docvalue_scanbooleanНетtrueПытается читать doc-values для поддерживаемых полей
nodes_discoverybooleanНетtrueОбнаруживает узлы; в изолированных сетях может потребоваться отключение

Полный список параметров, сведения об аутентификации и аннотациях массивов см. в ES Catalog.

Типы и семантика поиска​

  • ES Catalog сопоставляет object и nested с JSON, а не автоматически с VARIANT. Выполняйте преобразование явно и проверяйте результат перед использованием другого целевого типа.
  • Поля ES могут содержать как скалярные значения, так и массивы. Настройте _meta.doris.array_fields согласно документации, проверьте вывод DESC и изучите реальные примеры данных, не делая выводов обо всём столбце по одному документу.
  • Проверьте форматы дат, часовые пояса, числовые диапазоны и отсутствующие поля. Поле text, к которому применяется анализатор, отличается от поля keyword, используемого для точного сопоставления.
  • В Doris инвертированные индексы поддерживают полнотекстовый поиск, но эквивалентность ES DSL, оценки релевантности, вложенных запросов и анализаторов автоматически не обеспечивается. Проверяйте результаты реальных запросов, не ограничиваясь механической заменой синтаксиса.

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

В период, когда запись в источник приостановлена, сравните количество документов и количество уникальных _id; в этом примере оба значения должны быть равны 2. Сравните примеры исходного _source с целевыми столбцами, включая отсутствующие значения, массивы JSON и даты.

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

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

Проверьте чтение полей и семантику поиска перед переходом к пакетной обработке. Для непрерывного зеркалирования необходимо отдельно спроектировать обновления, удаления, упорядочивание и повторную обработку по идентификатору документа; каталог не является задачей CDC. Рекомендации по переключению на целевую систему см. в Обзоре миграции.