Hive执行计划之只有map阶段SQL性能分析和解读

概述

可能所有的SQLboy刚接触SQL语句的时候都是select xxx from xxx where xxx。在hive中,我们把这种语句称为select-from-where型语句,也可称为简单SQL,这类简单SQL是特指不含有变转换函数,聚合函数,开窗函数和连接操作的SQL语句。

这类SQL主要特征是只有map阶段,没有reduce阶段。

本文分析一下这类简单SQL执行计划和性能,让我们从最基础的SQL分析,hive简单语句select from where 型语句性能分析,逐渐深入,进而学会分析复杂SQL的性能和执行计划。

所有的复杂SQL(几百行?上千行?)都是由一个个简单SQL带一些特殊函数堆叠而成的。

1.不带函数操作的select-from-where型简单SQL

这类SQL语句通常只有select-from-where,没有其他函数操作,或者操作符处理,例如字符串截取。

1.1执行示例

例1 不带函数操作的select-from-where型简单SQL。

-- 本文默认使用mr计算引擎
explain
-- 统计年龄等于30岁的所有昵称
select age,nick from temp.user_info_all 
where ymd = '20230505'
and age = 30;

执行执行计划结果:

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: user_info_all
            Statistics: Num rows: 32634295 Data size: 783223080 Basic stats: COMPLETE Column stats: NONE
            Filter Operator
              predicate: (age = 30) (type: boolean)
              Statistics: Num rows: 16317147 Data size: 391611528 Basic stats: COMPLETE Column stats: NONE
              Select Operator
                expressions: 30 (type: bigint), nick (type: string)
                outputColumnNames: _col0, _col1
                Statistics: Num rows: 16317147 Data size: 391611528 Basic stats: COMPLETE Column stats: NONE
                File Output Operator
                  compressed: true
                  Statistics: Num rows: 16317147 Data size: 391611528 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

通过以上内容,我们可以看到,整个SQL逻辑执行过程中只有map操作树(Map Operate Tree),若转换成MapReduce来看的话,即只有Map阶段的任务。

如果有执行计划里关键词不熟悉的,建议阅读这篇 Hive执行计划之一文读懂Hive执行计划

1.2 运行逻辑分析

以上流程我们可以分解为运行逻辑图来看,如下图:

我们在之前的文章中提起过,Hive执行计划是一个预估的执行计划,只有在SQL实际执行后才会获取到真正的执行计划。那我们来看看以上语句的实际运行控制台打印过程。额,失算了,因为结果太多,限制一下输出条数。

Query ID = hdfs_20230613111158_03c8f6e1-e04f-4e4e-aa9b-569a89860438
Total jobs = 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鲁边

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值