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

Multi Catalog

Кратко Apache Doris Multi Catalog превращает один кластер в федеративную систему, в которой внешние системы (Hive, Iceberg, Hudi, Paimon, Delta Lake, MySQL, PostgreSQL, Oracle, Elasticsearch, BigQuery, MaxCompute и другие) регистрируются как именованные Catalog. Каждая таблица адресуется как <catalog>.<db>.<table>, а таблицы из разных Catalog соединяются в одном SQL-операторе. Встроенное хранилище представлено ещё одним Catalog с именем internal, поэтому единая модель разрешений охватывает все источники без задания копирования данных и дополнительного движка запросов.

Apache Doris Multi Catalog: один кластер Doris выполняет федеративные запросы к собственному хранилищу и внешним системам (Hive, Iceberg, JDBC, ES и другим), используя трёхсоставные имена.

Зачем использовать Apache Doris Multi Catalog?​

Apache Doris Multi Catalog позволяет обходиться без задания копирования данных, конвейера CDC или дополнительного движка запросов, которые командам обычно приходится настраивать для запросов к нескольким системам хранения. Большинство аналитических команд уже используют несколько систем хранения. Таблицы фактов находятся в Hive или Iceberg в объектном хранилище. Измерения и данные об оперативном состоянии хранятся в MySQL или PostgreSQL. Задачи, связанные преимущественно с текстом, выполняются в Elasticsearch. В хранилище находятся подготовленные витрины данных. Когда запрос затрагивает две такие системы, обычно приходится жертвовать актуальностью данных или нести дополнительные расходы, а часто и тем и другим. Подключение новой системы через интеграции Catalog поддерживает кеш метаданных в прогретом состоянии и позволяет управлять таблицами озера данных, не выходя за рамки SQL.

Apache Doris подключается к каждой системе один раз, обнаруживает её базы данных и таблицы и предоставляет доступ к ним под выбранным вами именем. После этого таблица доступна по адресу <catalog>.<db>.<table> и ведёт себя в запросах как любая другая таблица.

  • Для соединения таблицы фактов в Iceberg с таблицей измерений в MySQL достаточно одного SELECT, без конвейера.
  • Хранилище и озеро данных используют единый интерфейс SQL, одну учётную запись пользователя и одну модель привилегий.
  • Для добавления нового источника достаточно CREATE CATALOG, без развёртывания дополнительных компонентов.

Что такое Apache Doris Multi Catalog?​

Apache Doris Multi Catalog — это федеративный слой на вершине стека метаданных, который организует все объекты в трёхуровневое пространство имён: Catalog, база данных, таблица. Встроенный Catalog internal содержит собственные таблицы Apache Doris. Все остальные Catalog являются внешними и используют коннекторы, каждый из которых поддерживает определённый тип источника. Коннектор отвечает за обнаружение метаданных, сопоставление типов, отсечение разделов и операции чтения, а всё чаще и записи. Оптимизатор запросов строит план сразу для всех источников, поэтому соединение таблицы Iceberg с таблицей Apache Doris выполняется тем же движком MPP, что и соединение двух внутренних таблиц.

Основные термины

  • internal: встроенный Catalog, содержащий собственные таблицы Apache Doris. Его нельзя создать, переименовать или удалить.
  • Внешний Catalog: любой Catalog, созданный с помощью CREATE CATALOG ... PROPERTIES ("type" = "..."). Apache Doris поставляется с коннекторами для hms (Hive и совместимые с Hive хранилища метаданных), iceberg, hudi, paimon, jdbc, es, max_compute, bigquery, kafka, trino-connector и других типов источников.
  • Трёхсоставное имя: catalog.db.table. Всегда разрешается одинаково, независимо от того, используется ли оно в сеансе одного Catalog или при обращении к разным Catalog.
  • SWITCH и USE: SWITCH iceberg_ctl меняет текущий Catalog сеанса, подобно тому как USE меняет текущую базу данных. USE iceberg_ctl.iceberg_db переключает Catalog и базу данных одним оператором.
  • Кеш метаданных: кеш на стороне FE, в котором хранятся схемы, списки разделов и списки файлов внешних Catalog для быстрого построения планов. Обновляется по TTL, по событиям на стороне источника или с помощью REFRESH CATALOG.

Как работает Apache Doris Multi Catalog?​

Apache Doris Multi Catalog регистрирует каждый внешний источник на FE как именованный коннектор, затем разрешает каждую ссылку на таблицу как трёхсоставное имя, позволяя оптимизатору построить единый MPP-запрос ко всем источникам.

  1. Регистрация Catalog. CREATE CATALOG <name> PROPERTIES ("type" = "<type>", ...) записывает параметры подключения на FE. Свойства сохраняются в журнале изменений FE; больше ничего не перемещается. Apache Doris не копирует схемы или данные.
  2. Обнаружение по мере обращения. Когда сеанс впервые обращается к Catalog, коннектор получает списки его баз данных и таблиц, загружает схемы и заполняет кеш метаданных. Подробнее о том, что кешируется и на какой срок, см. в разделе Кеш метаданных.
  3. Разрешение трёхсоставных имён. Каждая ссылка на таблицу разбирается как catalog.db.table. Для неквалифицированных имён используются текущие Catalog и база данных сеанса. SWITCH, USE и пользовательское свойство default_init_catalog определяют, куда будут направлены обращения по неквалифицированным именам.
  4. Построение единого плана запроса. Оптимизатор получает статистику от коннектора каждого Catalog, выбирает порядок соединений и способ проталкивания предикатов, затем создаёт единый распределённый план. В одном графе фрагментов план может сочетать сканирование tablet Apache Doris из internal, манифестов Iceberg, получение данных MySQL через JDBC и запросы ES.
  5. Поддержание актуальности. TTL и события на стороне источника (события Hive Metastore, указатели на снимки Iceberg, повторная загрузка снимков Paimon) поддерживают согласованность кеша с источником. REFRESH CATALOG, REFRESH DATABASE и REFRESH TABLE позволяют выполнить остальные необходимые обновления.

Быстрый старт​

-- Register a Hive catalog
CREATE CATALOG hive_ctl PROPERTIES (
"type" = "hms",
"hive.metastore.uris" = "thrift://hms:9083"
);

-- Register a MySQL catalog for dimension tables
CREATE CATALOG mysql_ctl PROPERTIES (
"type" = "jdbc",
"user" = "doris", "password" = "xxx",
"jdbc_url" = "jdbc:mysql://mysql:3306/dim",
"driver_url" = "mysql-connector-j-8.4.0.jar",
"driver_class" = "com.mysql.cj.jdbc.Driver"
);

-- One federated query, three catalogs
SELECT o.region, SUM(f.amount), d.name
FROM hive_ctl.sales.orders f
JOIN internal.curated.region o ON f.region_id = o.id
JOIN mysql_ctl.dim.product d ON f.sku = d.sku
WHERE f.dt = CURRENT_DATE() GROUP BY 1, 3;

Ожидаемый результат

+--------+-------------+----------+
| region | SUM(amount) | name |
+--------+-------------+----------+
| EMEA | 112_490 | Widget A |
| APAC | 87_310 | Widget B |
+--------+-------------+----------+

SHOW CATALOGS выводит internal, hive_ctl и mysql_ctl. Запрос планируется и выполняется как единое задание MPP; промежуточная таблица не требуется.

Когда стоит использовать Apache Doris Multi Catalog?​

Используйте Apache Doris Multi Catalog, когда запрос должен обращаться к хранилищу и одному или нескольким внешним источникам без промежуточного этапа ETL.

Подходящие сценарии

  • Федеративная аналитика по данным озера (Hive, Iceberg, Hudi, Paimon, Delta Lake) и хранилища Apache Doris без предварительного ETL в Apache Doris.
  • Соединение фактов из хранилища с оперативными измерениями в MySQL, PostgreSQL, Oracle, SQL Server или других источниках JDBC.
  • Включение результатов текстового поиска в Elasticsearch в SQL-конвейер наряду со структурированными фильтрами.
  • Миграция и параллельная работа систем. Подключите Doris к существующему Hive или внешнему хранилищу, выполняйте запросы через Doris и постепенно переносите рабочие нагрузки.
  • Интеграция данных ZeroETL. INSERT INTO internal.x SELECT ... FROM hive_ctl.y загружает данные в Apache Doris без отдельного загрузчика.

Неподходящие сценарии

  • Использование внешнего Catalog как цели для OLTP-нагрузки с интенсивной записью. Обратная запись поддерживается для Catalog Hive, Iceberg и JDBC, но её пропускная способность ограничена источником и не сопоставима с записью во внутренние таблицы Apache Doris в internal. Направляйте интенсивный поток записей в internal, а обратную запись выполняйте пакетами.
  • Транзакционные обновления внешних источников. Apache Doris не поддерживает транзакции между Catalog, а большинство внешних Catalog не поддерживают обновления на уровне строк так, как это делает внутренний Catalog. Для этого используйте собственный DML источника.
  • DDL между Catalog. CREATE TABLE ... AS SELECT работает между Catalog как копирование, но создание одной и той же таблицы в двух Catalog остаётся вашей задачей, а не задачей Apache Doris.
  • Объединение двух пулов вычислительных ресурсов в одном запросе. Федерация объединяет источники данных, а не вычислительные ресурсы. Об изоляции вычислений см. в разделе Вычислительная группа.
  • Подробная ручная настройка каждого коннектора по этому описанию. Параметры для конкретных источников (AWS Glue, Iceberg REST, отдельные диалекты JDBC, S3-совместимые хранилища, Kerberos, IAM) приведены в отдельной карточке Интеграции Catalog и справочной документации по каждому Catalog.

Дополнительные материалы​

  • Интеграции Catalog: справочник коннекторов для отдельных источников (Glue, Iceberg REST, диалекты JDBC, объектные хранилища, режимы аутентификации).
  • Управление таблицами озера данных: обратная запись, эволюция схемы и DML для таблиц Hive, Iceberg и Paimon, доступных через Multi Catalog.
  • Кеш метаданных: как FE кеширует внешние схемы, разделы и списки файлов и поддерживает их актуальность.
  • Обзор Catalog данных: руководство пользователя по CREATE, SWITCH, REFRESH и свойствам чувствительности к регистру, общим для всех Catalog.
  • Обзор lakehouse: место Multi Catalog в архитектуре lakehouse Doris.
  • Справочник CREATE CATALOG: полный синтаксис DDL, поддерживаемые типы и справочник свойств.
  • Справочник SWITCH CATALOG: семантика переключения на уровне сеанса.
  • Iceberg: наиболее развитый коннектор с полной поддержкой в стеке федеративных Catalog Doris: полноценный движок чтения и записи, а не только средство чтения.