Presto/Trino
问题
什么是 Presto/Trino?和 Hive 有什么区别?
答案
简介
Presto(现已更名 Trino)是一个 **MPP(大规模并行处理)**查询引擎,提供秒级交互式查询。
| 对比 | Presto/Trino | Hive |
|---|---|---|
| 延迟 | 秒~分钟 | 分钟~小时 |
| 计算模型 | 内存 Pipeline | MapReduce |
| 存储 | 不自带,查询外部 | HDFS |
| 特色 | 跨数据源查询 | 大规模 ETL |
跨源查询
Presto/Trino 的核心优势是连接多个数据源统一查询:
-- 跨数据源 JOIN:Hive 表 + MySQL 表
SELECT
h.user_id,
h.total_amount,
m.username,
m.phone
FROM hive.dws.user_order_summary h
JOIN mysql.prod.users m ON h.user_id = m.user_id
WHERE h.dt = '2024-01-15';
支持的数据源:Hive、MySQL、PostgreSQL、MongoDB、Elasticsearch、Kafka、Redis 等。
适用场景
| 场景 | 是否适合 | 原因 |
|---|---|---|
| 即席查询 / Ad-hoc | ✅ | 秒级响应 |
| BI 看板查询 | ✅ | 低延迟 |
| 跨源关联 | ✅ | 核心优势 |
| 大规模 ETL | ❌ | 内存限制 |
| 流式计算 | ❌ | 不支持 |
数据分析师使用建议
- 日常 Ad-hoc 分析首选 Trino(比 Hive 快很多)
- BI 工具(Superset/Metabase)连接 Trino 做即席分析
- 大批量 ETL 仍然用 Hive/Spark
常见面试问题
Q1: Presto 和 Trino 是什么关系?
答案:
- Presto 是 Facebook 开源的查询引擎
- 核心团队离开后创建了 Trino(原名 PrestoSQL)
- 两者功能类似,Trino 是更活跃的社区版本
Q2: Presto/Trino 查询慢怎么优化?
答案:
- 减少扫描的数据量(加分区过滤)
- 使用 ORC/Parquet 格式
- 避免大表 JOIN 大表
- 增加 Worker 节点
- 使用
EXPLAIN查看执行计划