presto 是分布式大数据 sql 查询引擎,适用于交互式分析查询,是为了解决数仓的交互式分析和处理速度的问题
应用场景
- 数据平台的临时查询:进行探索性的数据分析
- bi 报表引擎
- 数据质量管理:使用 presto 进行数据质量校验
- 数据产品:比如 crm 数据分析,人群画像会使用 presto 进行计算
查询过程
- Client 发送请求给 Coordinator。
- SQL 通过 ANTLR 进行解析生成 AST。
- AST 通过元数据进行语义解析。
- 语义解析后的数据生成逻辑执行计划,并且通过规则进行优化。
- 切分逻辑执行计划为不同 Stage,并调度 Worker 节点去生成 Task。
- Task 生成相应物理执行计划。
- 调度完后根据调度结果 Coordinator 将 Stage 串联起来。
- Worker 执行相应的物理执行计划。
- Client 不断地向 Coordinator 拉取查询结果,Coordinator 从最终汇聚输出的 Worker 节点拉取查询结果。
高效
- Pipeline, 全内存计算。
- SQL 查询计划规则优化。
- 动态代码生成技术。
- 数据调度本地化,注重内存开销效率,优化数据结构,Cache,非精确查询等其它技术。