订阅更新

不用导入数据就能查Hive和S3?——Multi-Catalog湖仓一体

Doris手册 第 18 题 约 5 分钟读完

本文目录
  1. 先说结论
  2. 常见Catalog创建示例
  3. 实战经验:冷热分离方案
  4. Multi-Catalog的性能优化
  5. 面试高频追问
  6. 总结

先说结论

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本地SSD30天直接查Doris毫秒到秒级
温数据(30-90天)S3 Parquet90天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年大数据老兵,聊技术、聊职场、聊成长

刷题进度保存在当前浏览器