网站流量日志分析--统计分析--hive 级联求和问题案例|学习笔记

简介: 快速学习网站流量日志分析--统计分析--hive 级联求和问题案例

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第四阶段)网站流量日志分析--统计分析--hive 级联求和问题案例】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/696/detail/12243


网站流量日志分析--统计分析--hive 级联求和问题案例


1、为了更好理解 hive 级联求和的问题通过例子去理解级联求和以及为什么要通过自己跟自己 join 解决类问题

2、打开课程的参考资料点击软件,点击 hive点击 hive 级联求和

image.png

3、结构化数据文件有三个字段一个字段表示的是用户名a 用户b 用户第二个字段表示的是月份几月份第三个字段是获得的一次小费费用可以理解为a用户是餐厅的服务人员比如a用户2015年1月份获得五块钱还有一次获取15块钱把结构化数据映射成一张表

4、创建数据的文件打开的 linux 本地进行 vim 编辑把结构化数据完整的复制进去

A,2015-01 ,5

A,2015-01,15

B,2015-01 ,5

A,2015-01,8

B,2015-01 ,25

A,2015-01 ,5

A,2015-02,4

A,2015-02,6

B,2015-02,10

B,2015-02, 5

A,2015-03, 7

A,2015-03, 9

B,2015-03, 11

B,2015-03, 6

创建表

create table t_ salary_ detail (username string ,month string,salary int)

row format delimited fields terminated by,’;

打开 hive 终端执行使用 load 命令把数据文件加载到表中为了验证方便进行验证输入select * from t salary detail;查看表的数据是否映射成功非常方便。

5、需求统计每个用户每个月获得小费

小费的计算是 salary 进行 sum 求和a 用户和 b 用户要进行分组每个用户根据月份分组

分组维度username month 的所有 b

select username , month, sum (salary) from t_ salary detail group by username , month ;

在每个组内进行求和把所有小费都加起来就是总的小费哪个用户哪个月

username

month

C2

A

2015-01

33

A

2015-02

10

A

2015-03

16

B

2015- 01

30

B

2015- 02

15

B

2015-03

17

累计金额,用户到当前月累计获得多少小费比如a用户1月份获得33累计获得33a用户2月份获得十块钱获得10加333月份a用户获得16累计获得43加1659字段是a用户的累计同样B用户也要进行计算b用户1月份获33累332月份获得15累计获得483月份获得17累计获得48加1765如果先不考虑sql怎么写要想得到截止到当月的累计金额除当月的费用还要把当月往前的月份加起来发现规律就是计算的某个指标除当前行的数据之外还跟之前行的数据相关如果计算3月除3月份还需要2月份1月份这就是级联求和问题针对这类问题方向很明确自己跟自己 join,如果不加过滤条件总共会有36条记录但是

a 和 b join 没有意义所以在 join 时应该加条件a.username= 另外的  username,左右两个表进行关联时a 和 a 关联b 和 b 关联才有意义

6、把 sql 做嵌套查询起个名一个是 a 表一个是 b 注意跟之前的 a 用户和 b 用户不一样

将月总金额表,自己连接,自己连接

select A.*,B.* FROM

(select username , month, sum(salary) as salary from t_ salary detail group by username , month) A

inner join

(select username , month , sum (salary)

as salary from t_ salary detail group by use rname , month) B

on

A. Username=B. username

where B . month <= A . month

a和b根据username进行关联结果有18条记录按照第一条记录当月的金额33,累计金额还是33,如果有两条记录,2月份的金额是10,累计金额就是1033,如果有三条记录,3月份的累计金额就是331016,规律是 b.month 小于等于 a.month 数据加 where 条件进行过滤执行

a. username

a. month

a. sa lary

b. username

b. month

b. salary

A

2015-01

33

A

2015-01

33

A

2015-02

10

A

2015-01

33

A

2015-02

10

A

2015-02

10

A

2015-03

16

A

2015-01

33

A

2015-03

16

A

2015-02

10

A

2015-03

16

A

2015-03

16

B

2015-01

30

B

2015-01

30

B

2015-02

15

B

2015- 01

30

B

2015-02

15

B

2015-02

15

B

2015-03

17

B

2015-01

30

B

2015-03

17

B

2015-02

15

B

2015-03

17

B

2015-03

17

通过第一行获得一月份通过二三行获得二月份的通过四五六行获得三月份的如何让它们分在不同的组中根据在每个分组内根据 b. salary 进行求和就是累加金额a. month 任选其一就是当月的金额三条 a 用户三月份两条s用户二月份再根据用户进行分组即可相同用户的相同月进入同一分组中在每个组内再进行 b. salary 进行求和得到累计金额group by A.username ,A .

month 保证一月份的一组二月份的一组三月份的一组在每个组内进行sum(B.salary) 可以得到累计金额,301517就是 b 用户三月份的累计金额max 取最大都是17,任意一个都可以作为当月的最后得到结果

7、执行

进行分组查询,分组的字段是 a.username a . month

求月累计值:将 b .month <= a . month 的所有 b. salary 求和即可

select A. username , A. month, max (A.salary) as salary, sum(B.salary) as accumulate

from

(select username , month, sum(salary) as salary from t_ salary_ detail group by username , month) A

inner join

(select username , month, sum(salary) as salary from t_ salary_ detail group by username , month) B

on

A. use rname=B . use rname

where B.month <= A. month

group by A.username ,A . month

order by A. username , A. month;

得到所描述的需求当月的金额以及累计金额

a. username

a. month

salary

accumulate

A

2015-01

33

33

A

2015-02

10

43

A

2015-03

16

59

B

2015-01

30

30

B

2015-02

15

45

B

2015-03

17

62

核心点不在于找规律突破点在自己和自己 join这就是 hive 中非常重要常见的级联求和问题针对这类问题找准非常关键当前行的指标数据计算需要除了自己这一行还和之前的行有关采用 join 自己和自己的方式解决

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
Linux 应用服务中间件 PHP
性能工具之linux常见日志统计分析命令
通过本文的介绍,我相信同学们一定会发现 linux三剑客强大之处。在命令行中,它还能够接受,和执行外部的 AWK 程序文件,可以对文本信息进行非常复杂的处理,可以说“只有想不到的,没有它做不到的。
391 1
|
9月前
|
人工智能 运维 监控
一招高效解析 Access Log,轻松应对泼天流量
一招高效解析 Access Log,轻松应对泼天流量
174 0
一招高效解析 Access Log,轻松应对泼天流量
|
SQL 分布式计算 Hadoop
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
Hadoop-19 Flume Agent批量采集数据到HDFS集群 监听Hive的日志 操作则把记录写入到HDFS 方便后续分析
283 2
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
存储 Java 关系型数据库
基于JSP的九宫格日志网站
基于JSP的九宫格日志网站
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
561 2
|
SQL JSON 算法
hive学习笔记
hive学习笔记
|
监控 安全 前端开发
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
268 0
|
存储 SQL 分布式计算
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)
839 0
|
Shell Perl
检测网卡流量,并按规定格式记录在日志中
检测网卡流量,并按规定格式记录在日志中
157 2