hive调优 ------- 竖表变横表

好久没有更新博客了

 

来公司三个多月,别的没学到,天天写sql hive,本来很反感这样的重复性劳动,不过呢!既来之则安之

 

 

工作中遇到这样一个需求

有这这样一张表t_buy_buyer_time_hongbao_asc

 

 

用户id  次序        购买时间

25560   1       1325345254     

25560   2       1331043510     

25560   3       1331999999     

25720   1       1320381121     

25720   2       1320461154     

25720   3       1320639271     

26840   1       1337214675    

26840   2       1337214694     

26840   3       1337214768    

37160   1       1328583075

 

需求是在某张表中罗列出某用户的第一次购买时间,第二次购买时间,第三次购买时间

比如

用户id       第一次购买         第二次购买           第三次购买

25560   1325345254    1331043510     1331999999  

25720   1320381121    1320461154     1320639271     

26840   1337214675    1337214694     1337214768    

......

 

 

于是呢 打一个很形象的比方就是 把竖表变横表的要求

 

使用两种hive脚本来查询hive1

select 
		tb1.uid as uid, 
		tb1.order_time as s1t_deal_time, 
		tb2.order_time as c2d_deal_time, 
		tb3.order_time as r3d_deal_time
from 
                (select * from t_buy_buyer_time_hongbao_asc where row_num=1 and pt='20121010000000')tb1  
		left outer join 
		(select * from t_buy_buyer_time_hongbao_asc where row_num=2 and pt='20121010000000')tb2  
		on tb1.uid=tb2.uid 
		left outer join 
		(select * from t_buy_buyer_time_hongbao_asc where row_num=3 and pt='20121010000000')tb3  
		on tb1.uid=tb3.uid 

本hive脚本只需要一个job,执行时间376.005 s 

 

 

hive2

select 
		tb1.uid as uid, 
		s1t_deal_time, 
		c2d_deal_time, 
		r3d_deal_time
from 
		(select uid,sum(if(row_num=1,order_time,0)) as s1t_deal_time,sum(if(row_num=2,order_time,0)) as c2d_deal_time,sum(if(row_num=3,order_time,0)) as r3d_deal_time from t_buy_buyer_time_hongbao_asc where pt='20121010000000' group by uid)tb1

本hive脚本也只需要一个job,执行时间是328.733 s

额,不要嫌慢,在hadoop上跑数据的确是很慢很慢的

 

 

其实执行效率被优化了五十多s,但疑问是为什么hive1会只生成一个job呢?原因在于我们的连接条件是同一张表的同一个uid,于是呢,hive会做一个效率优化。

 

 

 

 

 

【6层】一字型框架办公楼(含建筑结构图、计算书) 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值