Hive执行计划分析之group by执行计划分析

基础数据

我们使用电商网站用户行为数据进行测试,数据格式如下:

-- 用户行为数据
CREATE TABLE `tmp.log_user_behavior`(
  `user_id` string COMMENT '用户id',
  `item_id` string COMMENT '商品id',
  `category_id` string COMMENT '商品分类id',
  `behavior` string COMMENT '行为',
  `ts` date COMMENT '行为发生时间')
PARTITIONED BY (
  `date` string)
  
231758,3622677,4758477,pv
92253,642337,4135185,pv
297958,1762578,4801426,pv
786771,1940649,1320293,pv
789048,3144191,2355072,pv
895384,1138468,1602288,pv
578800,1324176,4135836,pv
886777,4606952,996587,pv  

Group by执行原理分析

Group By任务转化为MR任务的流程如下:

  • Map:生成键值对,以GROUP BY条件中的列作为Key,以聚集函数的结果作为Value
  • Shuffle:根据Key的值进行 Hash,按照Hash值将键值对发送至不同的Reducer中
  • Reduce:根据SELECT子句的列以及聚集函数进行Reduce

Group by执行计划分析

在不进行任何参数调整的情况下,Group By会分为Map和Reduce两个阶段,Map阶段扫描表按照需要聚合的字段,形成K-V对,在Reduce阶段会对相同的K进行Agg操作,执行计划如下所示:

hive> set hive.map.aggr=false;
hive> explain select user_id, item_id, count(*) from tmp.log_user_behavior where date='20200831' group by user_id, item_id;
OK
STAGE DEPENDENCIES:
  Stage-1 is a root stage  -- Stage-1是Map-Reduce阶段
  Stage-0 depends on stages: Stage-1  

STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Map Operator Tree:  -- Map
          TableScan  -- 扫描表
            alias: log_user_behavior --- 表名
            Statistics: Num rows: 34021 Data size: 6804393 Basic stats: COMPLETE Column stats: NONE  -- 表的统计信息
            Select Operator  -- 选择字段
              expressions: user_id (type: string), item_id (type: string)
              outputColumnNames: user_id, item_id
              Statistics: Num rows: 34021 Data size: 6804393 Bas
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值