大数据开发之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;

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

扫描二维码关注公众号,回复: 5177462 查看本文章

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

猜你喜欢

转载自blog.csdn.net/weixin_39702831/article/details/85256262
今日推荐