养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

hive sum函数的顶级应用(配合开窗函数OVER)

时间:2024-10-07 20:37:21

在我们基本的认识中,sum函数都是用来求和的,没错,sum就是用来求和的,但除了对整列求和外,你还知道hive的哪些特殊的应用呢,下面小编就为您扒一扒hive中sum的高级顶级应用。

工具/原料

HADOOP

HIVE\CRT

方法/步骤

1、首先去下载我准备的数据http://pan.baidu.com/s/1bns3wwJ部分数据示例如下:

hive sum函数的顶级应用(配合开窗函数OVER)

2、下载后建表并导入数据,我擢爻充种的数据库为tmp,可根据你的实际情况自行修改createtabletmp.hi即枢潋雳ve_sum(idstringCOMMENT'会员ID',bank_namestringCOMMENT'银行名称',create_timestringCOMMENT'交易时间',amountdoubleCOMMENT'交易金额')COMMENT'hive_sum顶级应用'ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t'LINESTERMINATEDBY'\n';loaddatalocalinpath'/data/tmp/tqc/hive_sum.txt'overwriteintotabletmp.hive_sum;

3、每条记录增加此会员的消费总额,用到开窗函数overselectid,bank_name,create_time,amount,sum(amount)over(partitionbyid)amount_allfromtmp.hive_sumorderbyid,bank_name,create_time;部分结果如下:

hive sum函数的顶级应用(配合开窗函数OVER)

4、如果想按会员id,银行查询历史消费信息水貔藻疽,只需在开窗函数over里的partition部分增加bank_name字段即可,代洁船诼抨码如下selectid,bank_name,create_time,amount,sum(amount)over(partitionbyid,bank_nameorderbycreate_timeasc)amount_allfromtmp.hive_sumorderbyid,bank_name,create_timeasc;注 意:partitionby是分组用的,按谁进行分组统计,orderby不要省掉,否则会有麻烦, asc或者desc最好写上。between2preceding(是前两行)and2following (是后两行,没有就不出现)注意是分组后的前后两行哦效果:

hive sum函数的顶级应用(配合开窗函数OVER)

5、按时间显示会员本次消睦铌痹湔费的上两次、下两次消费的和,也就是本次消费的前后两次消费总和,sql如下selectid,cr髫潋啜缅eate_time,amount,sum(amount)over(partitionbyidorderbycreate_timeascrowsbetween2precedingand2following)amount_allfromtmp.hive_sumorderbyid,create_timeasc;查询部分结果显示

hive sum函数的顶级应用(配合开窗函数OVER)

6、求每个会员每个银行的消费总额,并单独一行显示此会员的消费总额selectid,bank_name,sum(amount)amount_allfromtmp.hive_sumgroupbyid,bank_namewithrolluporderbyid,bank_namedesc;显示效果如下:

hive sum函数的顶级应用(配合开窗函数OVER)

7、hivesum求和的高级应用很多时候万恶的分析师在数据出完后,还要一条对每个会员消费总额或者什么什么什么的汇总,这时候你可能用的最多的是unionall了吧,现在换个方法吧withrollup,你会有意想不到的惊喜。

© 一点知识