不用导入数据就能查Hive和S3?——Multi-Catalog湖仓一体
先说结论
Multi-Catalog让Doris可以直接查询外部数据源:Hive、Iceberg、Hudi、Delta Lake、JDBC数据库、S3上的文件。不需要把数据导入Doris,创建一个Catalog就能查。核心价值:热数据存Doris(高速查询),冷数据存S3/Hive(低成本),统一查询实现湖仓一体。
先把这段讲顺;面试官追问时,再展开下面的原理和细节。
详细讲解
Doris 2.0引入的Multi-Catalog功能让Doris从一个纯OLAP引擎进化成了湖仓一体的查询引擎。在某元宇宙社交公司,我用Multi-Catalog实现了Doris直接查询S3上的历史数据(Parquet文件),不用把数据导入Doris就能跨热数据和冷数据做联合查询。面试官现在很喜欢问这个,因为湖仓一体是大数据的热门趋势。
常见Catalog创建示例
-- 创建Hive Catalog(查Hive表)
CREATE CATALOG hive_catalog PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://hms-host:9083'
);
-- 创建Iceberg Catalog
CREATE CATALOG iceberg_catalog PROPERTIES (
'type' = 'iceberg',
'iceberg.catalog.type' = 'hms',
'hive.metastore.uris' = 'thrift://hms-host:9083'
);
-- 创建JDBC Catalog(查MySQL)
CREATE CATALOG mysql_catalog PROPERTIES (
'type' = 'jdbc',
'user' = 'reader',
'password' = 'xxx',
'jdbc_url' = 'jdbc:mysql://mysql-host:3306',
'driver_url' = 'mysql-connector-java-8.0.jar',
'driver_class' = 'com.mysql.cj.jdbc.Driver'
);
-- 跨Catalog联合查询(热数据+冷数据)
SELECT
d.country,
SUM(d.amount) AS hot_amount,
SUM(h.amount) AS cold_amount
FROM internal.mydb.dwd_user_event d -- Doris本地热数据
FULL JOIN hive_catalog.mydb.history h -- Hive冷数据
ON d.user_id = h.user_id
GROUP BY d.country;
-- Doris本地数据秒级返回,Hive数据分钟级返回
-- 不需要把历史数据导入Doris,节省大量SSD存储成本
实战经验:冷热分离方案
| 数据温度 | 存储位置 | 保留时间 | 查询方式 | 查询速度 |
|---|---|---|---|---|
| 热数据(最近30天) | Doris本地SSD | 30天 | 直接查Doris | 毫秒到秒级 |
| 温数据(30-90天) | S3 Parquet | 90天 | Multi-Catalog | 秒到分钟级 |
| 冷数据(90天以上) | S3 Parquet(压缩) | 永久 | Multi-Catalog/Spark | 分钟级 |
Multi-Catalog的性能优化
① 谓词下推:WHERE条件下推到外部数据源,分区过滤和列裁剪都能生效,大幅减少网络传输。
② File Cache(Doris 2.1+):把从S3读取的数据缓存到BE本地磁盘。同一批数据第二次查询直接读缓存,速度接近本地表。
③ 向量化读取:读取外部Parquet/ORC文件时使用向量化引擎,批量处理效率远高于逐行读取。
面试高频追问
追问一:Multi-Catalog和导入Doris有什么区别?
导入是复制数据到Doris本地SSD,查询最快但占存储。Multi-Catalog直接查外部源,不复制数据但查询较慢。高频查询的数据导入Doris,低频的用Multi-Catalog。我的经验:最近30天导入Doris,历史数据Multi-Catalog直查。
追问二:Multi-Catalog支持写入吗?
Doris 2.1+支持INSERT INTO SELECT把外部数据写入Doris本地表,也支持CTAS建表并导入。但不支持直接写入外部数据源。
追问三:和Trino/Presto有什么区别?
Trino/Presto是纯查询引擎不存数据。Doris是自带存储的一体化引擎,Multi-Catalog是外部查询扩展。Doris查本地数据比Trino快得多(有本地索引、物化视图),查外部数据两者差不多。已有Doris集群用Multi-Catalog比再部署Trino更省事。
总结
Multi-Catalog面试讲三点:① 是什么(让Doris直查外部数据源);② 怎么用(创建Catalog配置连接,跨Catalog JOIN);③ 实际价值(冷热分离——热数据本地、冷数据S3、统一查询)。能讲出冷热分离方案和成本/性能权衡,面试官会觉得你有架构设计能力。
下一篇聊Doris 2.x的重要新特性:存算分离、倒排索引、Pipeline执行引擎
你们用了Multi-Catalog吗?查什么外部数据源?评论区聊聊~
关注「Wood聊大数据」| 9年大数据老兵,聊技术、聊职场、聊成长