大数据开发之Hive篇----使用字符串函数和窗口函数处理表格

处理一份流量表,要求统计出熊猫tv在各月的流量以及按月份来累加总额

数据部分

数据样例是这样的,每个字段之间用\t来分隔

熊猫tv	2018-01-02	5
快手	2018-01-02	3
YY	    2018-01-02	2
熊猫tv	2018-01-03	4
抖音	2018-01-02	15
快手	2018-01-03	3
YY	    2018-01-03	1
抖音	2018-01-03	16
熊猫tv	2018-02-02	5
快手	2018-02-02	3
YY	    2018-02-02	2
抖音	2018-02-02	15
熊猫tv	2018-02-03	4
快手	2018-02-03	3
YY	    2018-02-03	1
抖音	2018-02-03	16
熊猫tv	2018-03-02	5
快手	2018-03-02	3
YY	    2018-03-02	2
抖音	2018-03-02	15
熊猫tv	2018-03-03	4
快手	2018-03-03	3
YY	    2018-03-03	1
抖音	2018-03-03	16

要求统计出来的结果如下:

熊猫tv	2018-01	      100T      100T
熊猫tv	2018-02	      200T      300T
熊猫tv	2018-03	      100T      400T

这里会新增一个字段用于累加各个记录的数据

hive的实现

首先创建一张表

create table tv_flow(user string,date string,flow int) row format delimited fields terminated by '\t';

导入数据

load data local inpath '/home/test/data/flow' into table tv_flow;

转化日期字段和帅选出熊吗tv来


select user,substring(trim(date),1,7),flow from tv_flow where user like '熊猫tv' ;

有了上面这个字表后,我们基于这个表进行分组聚合操作(我们没有使用字表,而是为上面这个SQL创建了一个新表)
我们将会得到这样一个新表

create table flow_2(user string,date string,flow int) row format delimited fields terminated by '\t';
insert into flow_2 select user,substring(trim(date),1,7),flow from flow where user like '熊猫tv';

在这里插入图片描述

对这个表进行分组操作,看下情况如何

select user,date,sum(flow) from flow_2 group by user,date;

在这里插入图片描述
长这样子的,那么我们还需要将其各月份累加到一起来,所以我们看看使用如下的方式怎么样;

select user,date,sum(flow),sum(sum(flow)) over(order by date rows between unbounded preceding and current row) from flow_2 group by user,date;

结果如下:
在这里插入图片描述
好像是我们想要的…

其中我们使用到的字符串函数是:
trim 去空格
substring 取子串
sum(X) over(order by X1 rows between unbounded preceding and current row) 窗口函数,里面还能传入一个partition by来控制分组执行这个结果的,如果使用了在上面使用了partition by user那么我们就不用在最开始的时候使用where user like ‘熊猫tv’这个筛选条件了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值