Presto源码分析(和hive执行计划的比较)

本文对比分析了Presto和Hive在聚合操作、排序操作和JOIN操作上的执行计划差异。Presto的GROUP BY、排序和JOIN操作展示了其优化策略,包括部分聚合和全局聚合的阶段划分。Hive的排序操作则提出了疑问,可能在reduce阶段进行全局排序。在JOIN操作中,Presto使用了分发和部分聚合,而Hive的部分细节未给出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 聚合操作比较

1.1 presto groupby

explain select sum(totalprice),orderpriority from orders group by orderpriority;

 - Output[_col0, orderpriority] => [sum:double, orderpriority:varchar(15)]
         _col0 := sum
     - RemoteExchange[GATHER] => sum:double, orderpriority:varchar(15)
         - Project => [sum:double, orderpriority:varchar(15)]
             - Aggregate(FINAL)[orderpriority] => [orderpriority:varchar(15), $hashvalue:bigint, sum:double] //最终聚合
                     sum := "sum"("sum_9")
                 - RemoteExchange[REPARTITION] => orderpriority:varchar(15), sum_9:double, $hashvalue:bigint //从部分聚合节点远程拉取结果
                     - Aggregate(PARTIAL)[orderpriority] => [orderpriority:varchar(15), $hashvalue_11:bigint, sum_10:double] 
                             sum_10 := "sum"("totalprice") //部分聚合
                         - Project => [$hashvalue_11:bigint, orderpriority:varchar(15), totalprice:double]
                                 $hashvalue_11 := "combine_hash"(BIGINT '0', COALESCE("$operator$hash_code"("orderpriority"), 0))
                             - TableScan[tpch:tpch:orders:sf1.0, originalConstraint = true] => [totalprice:double, orderpriority:varchar(15)] //表扫描操作
                                     totalprice := tpch:totalprice
                                     orderpriority := tpch:orderpriority

1.2 hive groupby

explain select sum(o_totalprice),o_orderpriority from orders where o_orderkey>100 group by o_orderpriority;


STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 depends on stages: Stage-1

STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Map Operator Tree:
          TableScan //表扫描
            alias: orders
            Statistics: Num rows: 6000000 Data size: 596779236 Basic stats: COMPLETE Column stats: NONE
            Filter Operator //表过滤
              predicate: (o_orderkey > 100) (type: boolean)
              Statistics: Num rows: 2000000 Data size: 198926412 Basic stats: COMPLETE Column stats: NONE
              Select Operator //表投影
                expressions: o_orderpriority (type: string), o_totalprice (type: double)
                outputColumnNames: o_orderpriority, o_totalprice
                Statistics: Num rows: 2000000 Data size: 198926412 Basic stats: COMPLETE Column stats: NONE
                Group By Operator //对扫描、过滤和投影之后 的记过进行局部groupby,hash的方式
                  aggregations: sum(o_totalprice) //聚合函数
                  keys: o_orderpriority (type: string)
                  mode: hash
                  outputColumnNames: _col0, _col1
                  Statistics: Num rows: 2000000 Data size: 198926412 Basic stats: COMPLETE Column stats: NONE
                  Reduce Output Op
### StarRocks Hive 的特点 #### StarRocks 的特点 StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库,旨在简化并加速数据分析过程。用户可以利用其强大的功能来支持多种数据分析场景而无需复杂预处理[^1]。 - **高性能**:相较于传统解决方案如Presto,在某些情况下可达到三倍以上性能提升。 - **多场景适应性**:能够灵活应对不同类型的分析需求,包括但不限于实时数据处理、交互式查询以及大规模批处理作业。 - **易集成性**:不仅兼容现有生态系统中的工具服务(例如Hive外表),还提供了良好的扩展性灵活性以便于未来技术栈升级或变更[^2]。 ```sql SELECT * FROM hive_table WHERE date >= '2023-01-01'; ``` 此 SQL 语句展示了如何在 StarRocks 中访问来自 Hive 表的数据,体现了两者之间的良好互操作性。 #### Hive 的特点 作为最早期的大规模分布式计算框架之一,Apache Hive 主要用于结构化数据仓库管理,并允许开发者使用类似于SQL的语言来进行ETL(Extract, Transform, Load)流程定义执行。 - **成熟度高**:拥有丰富的社区资源技术积累,适合构建稳定可靠的企业级应用。 - **广泛采用**:由于其开放源码性质及其 Hadoop 生态系统的紧密结合,已被众多企业采纳为标准组件。 - **延迟较高**:对于即时响应型的任务可能不是最佳选择,因为它的设计初衷更偏向于批量处理而非低延时请求服务[^3]。 --- ### 性能对比 | 特征 | StarRocks | Hive | |------| | 执行速度 | 显著优于大多数同类产品 | 较慢 | | 并发能力 | 高效支持大量并发读写 | 受限于MapReduce架构 | | 实时性 | 支持毫秒级别返回结果 | 更倾向于分钟级别的任务完成时间 | 上述表格总结了两种数据库系统之间主要区别所在之处;值得注意的是具体表现还会受到实际部署环境的影响。 --- ### 各自适用的数据处理场景 #### StarRocks 适用场景 当业务逻辑涉及到频繁更新的小文件集合或是需要快速获取最新状态变化的信息时,比如金融交易记录跟踪或者社交媒体动态推送等功能模块,则应优先考虑选用具备高效索引机制支持细粒度分区特性的 StarRocks 来满足这些苛刻条件下的性能要求。 #### Hive 适用场景 而对于那些侧重长期保存海量历史资料并且对查询时效性不太敏感的应用领域而言——像电信运营商的日志归档中心或者是电商网站的商品销售趋势统计报告生成等场合下——则更适合依赖稳定性好且成本效益高的 Hive 架构进行开发实施。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值