一、基本概念

Doris 作为一款高性能的分析型数据库,在处理大规模数据存储和分析任务时表现出色。其 Catalog 是核心组件之一,承担着存储和管理元数据的重任。而多源数据目录(Multi-Catalog)功能的出现,极大地增强了 Doris 的数据湖分析和联邦数据查询能力,让 Doris 能够更便捷地对接外部数据目录。

目前,Doris 能够支持多种数据源,主要包括:

  1. Hive Metastore:借助这一数据源,Doris 可以访问包括 Hive、Iceberg、Hudi 在内的数据表。同时,它还能对接兼容 Hive Metastore 的数据源,像阿里云的 DataLake Formation 就属于此类。并且,无论是 HDFS 还是对象存储上的数据,Hive Metastore 都支持访问。

  2. Elasticsearch:通过该数据源,Doris 能够访问 ES 数据源,从而为数据分析提供更多的数据支持。

  3. JDBC:JDBC 使得 Doris 支持通过标准的 JDBC 接口,连接不同的、支持 JDBC 协议的数据库。目前已适配的数据源丰富多样,有 MySQL、PostgreSQL、Oracle、SQLServer、ClickHouse 等。相比旧版的 ODBC 外部表,JDBC 接口更统一、稳定性更高,1.2.0 版本后推荐优先使用。

二、基本操作(附示例代码)

2.1 查看 catalog

通过 SHOW CATALOGS 命令查看所有已创建的 catalog,支持模糊查询。

示例代码:
-- 1. 查看所有 catalog
 
SHOW CATALOGS;
 
-- 2. 模糊查询名称包含 "hive" 的 catalog
 
SHOW CATALOGS LIKE '%hive%';
 
-- 3. 查看 catalog 下的数据库(以 hive_catalog 为例)
 
USE hive_catalog;
 
SHOW DATABASES;
 
-- 4. 查看指定数据库下的表(以 hive_catalog 的 test_db 为例)
 
USE hive_catalog.test_db;
 
SHOW TABLES;

2.2 新增 catalog

不同类型的 catalog 需指定对应的 type 和参数,以下为 Hive Metastore、Elasticsearch、JDBC 三种常见类型的创建示例。

示例 1:创建 Hive Metastore Catalog
CREATE CATALOG hive_catalog
 
PROPERTIES (
 
"type" = "hms", -- 固定值,代表 Hive Metastore 类型
 
"hive.metastore.uris" = "thrift://192.168.1.100:9083", -- HMS 服务地址
 
"hive.metastore.db.type" = "mysql", -- HMS 元数据存储的数据库类型
 
"hive.metastore.db.name" = "hive_meta", -- HMS 元数据库名
 
"hive.metastore.db.user" = "hive_user", -- HMS 元数据库用户名
 
"hive.metastore.db.password" = "hive_pass123", -- HMS 元数据库密码
 
"metadata_refresh_interval_sec" = "3600" -- 元数据定时刷新间隔(秒)
 
);
示例 2:创建 Elasticsearch Catalog
CREATE CATALOG es_catalog
 
PROPERTIES (
 
"type" = "es", -- 固定值,代表 Elasticsearch 类型
 
"es.nodes" = "192.168.1.101:9200,192.168.1.102:9200", -- ES 集群节点地址
 
"es.username" = "es_user", -- ES 用户名(若开启认证)
 
"es.password" = "es_pass123", -- ES 密码(若开启认证)
 
"es.scroll.size" = "1000", -- 每次 scroll 读取的数据量
 
"metadata_refresh_interval_sec" = "1800" -- 元数据定时刷新间隔(秒)
 
);
示例 3:创建 JDBC Catalog(以 MySQL 为例)
CREATE CATALOG mysql_catalog
 
PROPERTIES (
 
"type" = "jdbc", -- 固定值,代表 JDBC 类型
 
"jdbc_url" = "jdbc:mysql://192.168.1.103:3306?useSSL=false&serverTimezone=UTC", -- MySQL 连接 URL
 
"driver_url" = "mysql-connector-java-8.0.32.jar", -- JDBC 驱动包名(需提前上传至 Doris 节点)
 
"driver_class" = "com.mysql.cj.jdbc.Driver", -- MySQL JDBC 驱动类名
 
"user" = "mysql_user", -- MySQL 用户名
 
"password" = "mysql_pass123", -- MySQL 密码
 
"metadata_refresh_interval_sec" = "7200" -- 元数据定时刷新间隔(秒)
 
);

2.3 切换 catalog

切换后可直接操作目标 catalog 下的数据库和表,语法与操作 Doris 内部表一致。

示例代码:
-- 1. 切换到 mysql_catalog
 
USE mysql_catalog;
 
-- 2. 查看 mysql_catalog 下的数据库
 
SHOW DATABASES;
 
-- 3. 切换到 mysql_catalog 下的 sales_db 数据库
 
USE mysql_catalog.sales_db;
 
-- 4. 查询 sales_db 下的 order 表数据(只读访问)
 
SELECT order_id, user_id, amount FROM order LIMIT 10;

2.4 删除 catalog

当 catalog 不再使用时,可通过 DROP CATALOG 命令删除,释放资源。

示例代码:
-- 删除名为 old_es_catalog 的 Elasticsearch Catalog
 
DROP CATALOG old_es_catalog;
 
-- 删除后验证(确认已不存在)
 
SHOW CATALOGS LIKE '%old_es%';

2.5 查看 catalog 创建信息

通过 SHOW CREATE CATALOG 命令查看 catalog 的创建语句和参数配置。

示例代码:
-- 查看 mysql_catalog 的创建信息
 
SHOW CREATE CATALOG mysql_catalog;
 
-- 输出结果示例(包含完整参数配置):
 
-- CREATE CATALOG mysql_catalog
 
-- PROPERTIES (
 
-- "type" = "jdbc",
 
-- "jdbc_url" = "jdbc:mysql://192.168.1.103:3306?useSSL=false&serverTimezone=UTC",
 
-- "driver_url" = "mysql-connector-java-8.0.32.jar",
 
-- "driver_class" = "com.mysql.cj.jdbc.Driver",
 
-- "user" = "mysql_user",
 
-- "password" = "mysql_pass123",
 
-- "metadata_refresh_interval_sec" = "7200"
 
-- )

三、元数据更新(附示例代码)

默认情况下,外部数据源的元数据变动不会自动同步到 Doris,需通过手动、定时或自动方式刷新,以下为具体操作示例。

3.1 手动刷新

通过 REFRESH CATALOG 命令手动同步指定 catalog 的元数据。

示例代码:
-- 手动刷新 hive_catalog 的元数据(适用于临时同步需求)
 
REFRESH CATALOG hive_catalog;
 
-- 刷新后验证(查看是否新增/删除表)
 
USE hive_catalog.test_db;
 
SHOW TABLES;

3.2 定时刷新

创建 catalog 时通过 metadata_refresh_interval_sec 参数设置定时刷新间隔,无需手动操作。

示例代码(创建时配置):
-- 创建 Hive Catalog 并设置每 1 小时(3600 秒)定时刷新元数据
 
CREATE CATALOG hive_catalog
 
PROPERTIES (
 
"type" = "hms",
 
"hive.metastore.uris" = "thrift://192.168.1.100:9083",
 
"metadata_refresh_interval_sec" = "3600" -- 定时刷新间隔(必填,单位:秒)
 
);

3.3 自动刷新(仅 Hive Catalog)

通过修改 FE 配置文件 fe.conf 开启 Hive Catalog 元数据自动增量同步,无需手动或定时触发。

示例步骤:
  1. 编辑 FE 节点的 fe.conf 文件:
  1. 添加 / 修改以下配置:
# 开启 Hive Catalog 元数据自动增量同步(默认 false,改为 true)
 
enable_hms_events_incremental_sync = true
 
# 读取 HMS 事件的间隔(默认 10000 毫秒,可按需调整)
 
hms_events_polling_interval_ms = 10000
 
# 每次读取事件的最大数量(默认 500,可按需调整)
 
hms_events_batch_size_per_rpc = 500
  1. 重启 FE 服务使配置生效:

四、JDBC Catalog 实操(附完整示例)

以连接 MySQL 为例,从驱动包上传到 catalog 创建、数据查询,提供全流程示例。

4.1 上传 MySQL JDBC 驱动包

  1. 下载 MySQL JDBC 驱动包(如 mysql-connector-java-8.0.32.jar),上传至所有 FE 和 BE 节点的 jdbc_drivers/ 目录(默认路径,可通过配置修改):
  1. (可选)若需修改驱动包目录,编辑 fe.conf 和 be.conf:
  1. 重启 FE 和 BE 服务:

4.2 创建 MySQL JDBC Catalog

示例代码:
CREATE CATALOG mysql_catalog
PROPERTIES (
"type" = "jdbc",
"jdbc_url" = "jdbc:mysql://192.168.1.103:3306?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true",
"driver_url" = "mysql-connector-java-8.0.32.jar", -- 驱动包名(需与上传的一致)
"driver_class" = "com.mysql.cj.jdbc.Driver", -- MySQL 8.0+ 驱动类名(5.7 为 com.mysql.jdbc.Driver)
"user" = "mysql_user", -- MySQL 用户名
"password" = "mysql_pass123", -- MySQL 密码
"metadata_refresh_interval_sec" = "7200" -- 每 2 小时刷新一次元数据
);

4.3 操作 MySQL 数据(查询示例)

示例代码:
-- 1. 切换到 mysql_catalog
 
USE mysql_catalog;
 
-- 2. 查看 MySQL 中的数据库(如 sales_db)
 
SHOW DATABASES LIKE '%sales%';
 
-- 3. 切换到 sales_db 数据库
 
USE mysql_catalog.sales_db;
 
-- 4. 查看表结构(如 order 表)
 
DESCRIBE order;
 
-- 5. 查询数据(统计 2024 年 1 月的订单总金额)
 
SELECT
 
DATE_FORMAT(order_time, '%Y-%m') AS month,
 
SUM(amount) AS total_amount
 
FROM order
 
WHERE order_time >= '2024-01-01' AND order_time < '2024-02-01'
 
GROUP BY month;
 
-- 6. 关联 Doris 内部表与 MySQL 外部表(示例:关联 Doris 内部的 user 表和 MySQL 的 order 表)
 
SELECT
 
u.user_name,
 
SUM(o.amount) AS user_total_amount
 
FROM internal_catalog.default.user u
 
LEFT JOIN mysql_catalog.sales_db.order o
 
ON u.user_id = o.user_id
 
GROUP BY u.user_name
 
LIMIT 20;

通过上述示例代码,可快速上手 Doris Multi Catalog 的核心操作。实际使用时,需根据数据源类型(如 Hive、ES、PostgreSQL 等)调整参数配置,确保连接信息与实际环境一致。若遇到驱动包加载失败、连接超时等问题,可优先检查驱动包路径、数据源地址及权限配置。

本站提供的所有下载资源均来自互联网,仅提供学习交流使用,版权归原作者所有。如需商业使用,请联系原作者获得授权。 如您发现有涉嫌侵权的内容,请联系我们 邮箱:alixiixcom@163.com