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?
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-запрос ко всем источникам.
- Регистрация Catalog.
CREATE CATALOG <name> PROPERTIES ("type" = "<type>", ...)записывает параметры подключения на FE. Свойства сохраняются в журнале изменений FE; больше ничего не перемещается. Apache Doris не копирует схемы или данные. - Обнаружение по мере обращения. Когда сеанс впервые обращается к Catalog, коннектор получает списки его баз данных и таблиц, загружает схемы и заполняет кеш метаданных. Подробнее о том, что кешируется и на какой срок, см. в разделе Кеш метаданных.
- Разрешение трёхсоставных имён. Каждая ссылка на таблицу разбирается как
catalog.db.table. Для неквалифицированных имён используются текущие Catalog и база данных сеанса.SWITCH,USEи пользовательское свойствоdefault_init_catalogопределяют, куда будут направлены обращения по неквалифицированным именам. - Построение единого плана запроса. Оптимизатор получает статистику от коннектора каждого Catalog, выбирает порядок соединений и способ проталкивания предикатов, затем создаёт единый распределённый план. В одном графе фрагментов план может сочетать сканирование tablet Apache Doris из
internal, манифестов Iceberg, получение данных MySQL через JDBC и запросы ES. - Поддержание актуальности. 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: полноценный движок чтения и записи, а не только средство чтения.