Presto/Trino Connector架构如何实现多源联邦查询?
请解释Presto/Trino的Connector架构,包括什么是SPI接口、如何实现自定义Connector、以及跨数据源联邦查询的执行流程(如同时查询Hive+MySQL+Kafka)。
回答
孤独的心
Connector架构:Presto/Trino通过Connector SPI接口扩展数据源。
核心SPI接口:
- ConnectorFactory:创建Connector实例
- ConnectorMetadata:提供元数据(表/列/分区)
- ConnectorSplitManager:生成Split(数据分片)
- ConnectorPageSource:读取数据,以Page(列式块)形式返回
- ConnectorPageSink:数据写入
联邦查询流程(以SELECT * FROM hive.t1 JOIN mysql.t2 ON ...为例):
- 解析SQL,识别hive和mysql两个Catalog
- 分别通过各自的ConnectorMetadata获取表结构
- Coordinator生成执行计划,划分Stage
- 谓词下推:将WHERE条件推给Connector层执行
- 每个Split数据由对应Connector的PageSource读取
- 数据在Trino Worker节点内存中做JOIN(Broadcast或Hash Join)
- 汇总结果返回客户端
自定义Connector:实现上述SPI接口打包成plugin,放入plugin/目录即可。
优势:
- 无需ETL搬运数据
- 支持100+数据源(Elasticsearch、MongoDB、Iceberg等)
- 查询优化器可跨源做CBO