网站流量日志分析--统计分析--受访分析热门页面 topN|学习笔记

简介: 快速学习网站流量日志分析--统计分析--受访分析热门页面 topN

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第四阶段) 网站流量日志分析--统计分析--受访分析热门页面 topN】学习笔记,与课程紧密联系,让用户快速学习知识。

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


网站流量日志分析--统计分析--受访分析热门页面 topN


内容介绍

一、各页面访问统计

二、热门页面统计

 

一、各页面访问统计

1、统计分析的受访分析受访指的是受到访问网站哪个页面被别人浏览,因此它从页面角度开展分析。主要是针对数据中的 request 进行统计分析,比如各页面 PV,各页面 UV 等。

2、打开数据,跟受访相关的字段叫 request字段所描述的数就是指本次请求请求的是哪个资源,哪个页面如果想要更加精准统计需要把里面请求图片过滤掉,如果没有请求斜杠表示首页根据页面受访分析,也可以开展各种各样的的指标分析,比如各页面相关的基础指标统计,比如网站只有首页和两个详情页,统计今天到网站三个页面到底每个页面分别产生的 pv 多少uv 多少,统计pv根据页面进行分组分组完之后统计次数,count 即可如果统计 uv 就是统计的去ip,以上指标无非就是根据页面的字段 group by。因为在这种情况下页面就是分组维度例如:

统计各页面 pv,明确指标忽略静态资源的影响,就是不管请求图片还是请求什么都当做请求页请求页面的pv需要根据 request 进行分组相同到同一组,比如请求的是 git3图片,另外如果是同样的图片,就属于同一个页面,根据页面分组分组维度就是 request分完组之后进行 count 统计,统计出就是每个页面的pvuv如果 count request 统计就是 pv如果 count 去重的 ip 就是 uv

select request as request,count(request) as request counts from

ods_ weblog detail group by request having request is not null order by request counts desc limit 20;

 

二、热门页面统计

1、统计每日最热门的页面 top10

drop table dw. hotpages everyday;

create table dw. hotpages. everyday(day string,url string,pvs string);

insert into table dw hotpages, everyday

select '201 30918',a.request,a.request counts from

(select request as request,count(request) as request. counts from ods. weblog, detail where datestr= '20181101'

group by request having request is not null) a

order by a.request counts desc limit 10;

2、梳理出现 top n 问题想到 Over 分组函数,或者窗口函数

(1)数据表:dw_weblog_detail

每天的页面根据天气分组,根据的页面进行统计统计完之后,按照标号去记从需求上没有会话相关的概念,明显可以排除跟点击流相关的表,因此需要是 detail宽表

(2)分组维度:时间维度(day) day 比较特殊还是表的分区字段、页面维度(request)

天除了是分组字段以外宽表是分区表,123号哪一天还是分区字段特殊就使得计算指标的时候,可以采用更加方便的形式最热门页面top10,a页面b页面d页面c页面根据不同页面进行分组,所以还有第二个维度页面维度

(3)度量值:count(*)--->top10

3、打开画图板画一个宽表它是一个分区表分区维度就是天,20181101,当下数量数据等于20181101随着数仓引进值,2,3,4,20181102、20181103、20181104,当下场景想到row_number分组窗口函数可以根据进行分组pvs 进行排序,取前几个就是top几思路正确但是在当下需求中天非常的特殊统计每一天,不需要 group by 就可以找到每一天,因为天是分区字段

突破: day是表的分区字段通过 where 分区查询即可过滤出指定的day内容,

需要统计20181101,datestr=20181101即可再根据 request 的页面进行分组统计,统计完之后,取第十个就非常方便

4、写 sql

起别名分区过滤保证拿到的是这一天再次强调在序列中没有考虑静态资源的问题忽略它里面是图片还是 gs 都把它看成页面注意跟现实实际需求的区别,根据它进行分组完成之后,在每个组内进行count统计起别名如果想知道是哪个页面也可以把 t.request 写上计算没问题但是拿到的是所有的页面,所有的结果在数据中有些 request 为空,所以进行过滤,保证当中有空的不参加分组要的不是整体的热门页面,而是所有热门页面top10最多的前十个,把所有页面请求做倒序排序,只取前十条,就是 top10的问题排序完成之后它只要热门页面前十个或者热门页面前五个查询结果指定返回的条数非常方便的语法是 limit 语法这种方式计算比 row_number 方式计算更加方便整个问题的突破点在于时间维度的它是分区字段,如果统计每个小时热门页面那么就要使用 row_number 函数进行统计

select

t. request,count(*) as pvs

from dw. _weblog detail t where t.datestr ="20181101" group by t. request having

t.request is not null order by pvs desc limit 10;

复制指标执行20181101热门页面最多的是斜杠首页,比较符合客观规律,一家公司如果不出意外访问最多的的页面应该是首页如果要贴近实战过滤静态资源要再加一个条件where=true这是统计每天最热门页面时最佳简便的一种方式,结合数据考虑,不要死板的套用某些语法工具

5、保存数据结果打开的参考资料项目资料点击数据分析点击受访分析

image.png

(1)创建表为 dw_ hotpages_ everyday每天的热门页面,里面有字段url 就是 requestpvs首先创建临时表,或者中间表

create table dw_ hotpages_ everyday (day string,url string,pvs string)

(2)把查询语句结果进行 insert 插入嵌套查询,把查询的返回结果,做嵌套起个别名叫做 a,把 a 表只取前十条插入到创建的,相当于可以把数据结果保存方便后面的使用

insert into table dw_ hotpages_ everyday

select ' 20181101' ,a. request,a. request_ counts from

(select request as request, count (request) as request_ counts from dw_ weblog_ detail where datestr='20181101' group by request having request is not null ) a

order by a. request_ counts desc limit 10 ;

3复制语句打开 hive 终端进行执行创建完之后就可以打开创建验证数据是否被保存

Select from dw_hotpages_everyday

image.png

可以发现的数据已经被保存在页面上进行可视化展示报表将会非常方便,还可以做其他力度的精准控制,每小时每月每天每分每秒,如果有需要就可以进行 group by 分组统计,是受访页面的统计分析

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
3月前
|
小程序 Linux 数据安全/隐私保护
Linux学习笔记十六:日志管理
Linux学习笔记十六:日志管理
|
3月前
|
监控 安全 前端开发
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
36 0
|
5月前
|
Java
JVM学习笔记-如何在IDEA打印JVM的GC日志信息
若要在Idea上打印JVM相应GC日志,其实只需在Run/Debug Configurations上进行设置即可。
66 0
|
6月前
|
缓存 NoSQL Redis
Redis学习笔记-AOF日志&重写机制
Redis学习笔记-AOF日志&重写机制
83 0
|
6月前
|
NoSQL Redis
Redis学习笔记-AOF 日志和 RDB快照
Redis学习笔记-AOF 日志和 RDB快照
65 0
|
24天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
81 1
|
25天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1
|
29天前
|
SQL 关系型数据库 MySQL
MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复
对于MySQL数据库,可以使用二进制日志(binary log)进行时间点恢复。二进制日志是MySQL中记录所有数据库更改操作的日志文件。要进行时间点恢复,您需要执行以下步骤: 1. 确保MySQL配置文件中启用了二进制日志功能。在配置文件(通常是my.cnf或my.ini)中找到以下行,并确保没有被注释掉: Copy code log_bin = /path/to/binary/log/file 2. 在需要进行恢复的时间点之前创建一个数据库备份。这将作为恢复的基准。 3. 找到您要恢复到的时间点的二进制日志文件和位置。可以通过执行以下命令来查看当前的二进制日志文件和位
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
51 0
|
1月前
|
存储 数据库
ALTER MATERIALIZED VIEW LOG :语句来更改现有物化视图日志的存储特征或类型。
`ALTER MATERIALIZED VIEW LOG` 语句用于修改已有的物化视图日志的存储属性或类型。配合示例中的动画图像(由于格式限制无法显示),该语句帮助优化数据库的性能和管理。
44 0