聚合函数的计划解读

在Reduce阶段执行的聚合

hive (default)> set hive.map.aggr=false;
hive (default)> explain
              > select s_age,sum(s_score) avg_score
              > from student_tb_txt
              > where s_age<20
              > group by s_age;

执行结果如下

Explain
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: student_tb_txt
            Statistics: Num rows: 32240060 Data size: 22568042496 Basic stats: COMPLETE Column stats: NONE
            Filter Operator
              predicate: (s_age < 20L) (type: boolean)
              Statistics: Num rows: 10746686 Data size: 7522680365 Basic stats: COMPLETE Column stats: NONE
              Reduce Output Operator
                key expressions: s_age (type: bigint)
                sort order: +
                Map-reduce partition columns: s_age (type: bigint)
                Statistics: Num rows: 10746686 Data size: 7522680365 Basic stats: COMPLETE Column stats: NONE
                value expressions: s_score (type: bigint)
      Execution mode: vectorized
      Reduce Operator Tree:
        Group By Operator
          aggregations: sum(VALUE._col0)
          keys: KEY._col0 (type: bigint)
          mode: complete
          outputColumnNames: _col0, _col1
          Statistics: Num rows: 5373343 Data size: 3761340182 Basic stats: COMPLETE Column stats: NONE
          File Output Operator
            compressed: false
            Statistics: Num rows: 5373343 Data size: 3761340182 Basic stats: COMPLETE Column stats: NONE
            table:
                input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink

map执行过程为 TableScan->Filter Operator ->Reduce Output Operator
map主要操作就是扫描全表,然后依照where的条件进行过滤,按照select的条件进行输出到Reduce

Reduce阶段Group By Operator->File Output Operator
Reduce主要是分组操作,分组聚合算法为sum,mode:complete表示所有的聚合操作都在Reduce阶段,outputColumnNames: _col0, _col1表示聚合操作输出列。File Output Operator表示输出格式

在Map和Reduce阶段聚合

set hive.map.aggr=true;
explain
select s_age,sum(s_score) avg_score
from student_tb_txt
where s_age<20
group by s_age;

执行结果如下

Explain
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: student_tb_txt
            Statistics: Num rows: 32240060 Data size: 22568042496 Basic stats: COMPLETE Column stats: NONE
            Filter Operator
              predicate: (s_age < 20L) (type: boolean)
              Statistics: Num rows: 10746686 Data size: 7522680365 Basic stats: COMPLETE Column stats: NONE
              Group By Operator
                aggregations: sum(s_score)
                keys: s_age (type: bigint)
                mode: hash
                outputColumnNames: _col0, _col1
                Statistics: Num rows: 10746686 Data size: 7522680365 Basic stats: COMPLETE Column stats: NONE
                Reduce Output Operator
                  key expressions: _col0 (type: bigint)
                  sort order: +
                  Map-reduce partition columns: _col0 (type: bigint)
                  Statistics: Num rows: 10746686 Data size: 7522680365 Basic stats: COMPLETE Column stats: NONE
                  value expressions: _col1 (type: bigint)
      Execution mode: vectorized
      Reduce Operator Tree:
        Group By Operator
          aggregations: sum(VALUE._col0)
          keys: KEY._col0 (type: bigint)
          mode: mergepartial
          outputColumnNames: _col0, _col1
          Statistics: Num rows: 5373343 Data size: 3761340182 Basic stats: COMPLETE Column stats: NONE
          File Output Operator
            compressed: false
            Statistics: Num rows: 5373343 Data size: 3761340182 Basic stats: COMPLETE Column stats: NONE
            table:
                input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

  Stage: Stage-0
    Fetch Operator
      limit: -1
      Processor Tree:
        ListSink

相比较上面,这个执行计划中在map阶段的Reduce Output opretator 前面多了一个Group By Operator阶段,mode为hash模式。这个阶段表示在每个map阶段都会执行聚合一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server执行计划是一个非常有用的工具,可以帮助你优化查询语句,提高数据库性能。执行计划是一个查询计划,它由SQL Server使用来执行查询语句的最佳方式。 执行计划中包含了查询语句的各个部分,包括表的访问方式、索引的使用情况、连接方式、排序方式等等。通过查看执行计划,可以了解查询语句在数据库中的执行情况,找到可能存在的瓶颈并进行优化。 以下是一些常见的执行计划中的术语及其含义: 1. 聚合操作:包括聚合函数(如SUM、AVG等)或GROUP BY语句。 2. 连接操作:指查询中的JOIN操作,包括内连接、左连接、右连接、全连接等。 3. 分配操作:指将数据分配到不同的物理位置,包括分组操作和排序操作。 4. 过滤操作:指WHERE子句中的条件,过滤出满足条件的数据。 5. 索引扫描:指使用索引进行数据访问的方式。 6. 表扫描:指直接对整个表进行扫描的方式。 7. 聚合操作的排序:指对聚合操作的结果进行排序的方式。 8. 连接操作的方式:包括嵌套循环连接、哈希连接和排序合并连接等。 9. 查询的成本:指SQL Server估算的查询成本,用于比较不同查询方案的效率。 要解读执行计划,可以使用SQL Server Management Studio中的图形化工具,或者使用T-SQL命令分析工具。在查询分析器中,可以使用SET SHOWPLAN_ALL和SET SHOWPLAN_TEXT命令来生成执行计划。 需要注意的是,执行计划并不是绝对准确的,它只是SQL Server估算的最佳执行计划。在实际应用过程中,可能存在其他因素影响查询性能,如硬件配置、网络延迟等。因此,在进行性能优化时,需要综合考虑多个方面的因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值