Presto 是一个开源的、分布式的 SQL 查询引擎。它的核心设计目标是:对海量数据进行快速的交互式分析查询。
简单来说,它允许你使用标准的 SQL 语言,高效地查询从 GB 到 PB 级别、存储在多种不同数据源(如 HDFS、S3、MySQL、Kafka 等)中的数据。
一、核心特点与设计理念
-
“分离存储与计算” (Decoupled Storage and ***putation)
- 这是 Presto 最核心的理念。Presto 本身不存储数据,它是一个纯计算引擎。
- 它的角色是一个“翻译官”和“协调员”:接收 SQL 请求,理解其意图,然后去各自的数据源(如 Hive、MySQL、Kafka)那里获取数据,在内存中进行计算和聚合,最后将结果返回给用户。
- 这样做的好处是极其灵活,可以无缝对接各种数据源,而不需要移动和拷贝数据。
-
高性能:MPP 架构 (Massively Parallel Processing)
- Presto 是一个 MPP(大规模并行处理)数据库引擎。它会将一个复杂的查询任务拆分成无数个细小的“任务碎片”(Fragments),然后分发到集群中的多个节点上并行执行。
- 所有计算都在内存中完成,中间数据不落盘(除非内存不足),极大地减少了 I/O 开销,从而实现了惊人的查询速度。很多查询可以在秒级甚至亚秒级完成。
-
多数据源联邦查询 (Federated Query)
- 这是 Presto 的一个杀手级功能。你可以在一条 SQL 语句中同时关联查询多个不同类型的数据源。
- 例如:你可以