CodeWalk

Presto/Trino Connector架构如何实现多源联邦查询?

作者:孤独的心 · 2026-05-30 12:55

请解释Presto/Trino的Connector架构,包括什么是SPI接口、如何实现自定义Connector、以及跨数据源联邦查询的执行流程(如同时查询Hive+MySQL+Kafka)。

回答

孤独的心

Connector架构:Presto/Trino通过Connector SPI接口扩展数据源。

核心SPI接口

  1. ConnectorFactory:创建Connector实例
  2. ConnectorMetadata:提供元数据(表/列/分区)
  3. ConnectorSplitManager:生成Split(数据分片)
  4. ConnectorPageSource:读取数据,以Page(列式块)形式返回
  5. ConnectorPageSink:数据写入

联邦查询流程(以SELECT * FROM hive.t1 JOIN mysql.t2 ON ...为例):

  1. 解析SQL,识别hive和mysql两个Catalog
  2. 分别通过各自的ConnectorMetadata获取表结构
  3. Coordinator生成执行计划,划分Stage
  4. 谓词下推:将WHERE条件推给Connector层执行
  5. 每个Split数据由对应Connector的PageSource读取
  6. 数据在Trino Worker节点内存中做JOIN(Broadcast或Hash Join)
  7. 汇总结果返回客户端

自定义Connector:实现上述SPI接口打包成plugin,放入plugin/目录即可。

优势

  • 无需ETL搬运数据
  • 支持100+数据源(Elasticsearch、MongoDB、Iceberg等)
  • 查询优化器可跨源做CBO