网站流量日志分析--统计分析--多维统计分析--时间维度--每小时指标统计|学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习网站流量日志分析--统计分析--多维统计分析--时间维度--每小时指标统计

开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第四阶段) 网站流量日志分析--统计分析--多维统计分析--时间维度--每小时指标统计】学习笔记,与课程紧密联系,让用户快速学习知识。

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


网站流量日志分析--统计分析--多维统计分析--时间维度--每小时指标统计


1、打开资料项目资料数据分析基础指标多维统计

image.png

2、多维度统计分析:注意 gruop by 语句的语法

多维度统计 PV 总量

第一种方式:直接在 dw. weblog_ detail 单表上进行查询

计算该处理批次(一天)中的各小吋 pvs

3梳理

时间维度统计

计算该处理批次(一天)中的各小吋 pvs,页面被点击加载的次数跟点击流模型中的会话第一步第二步停留时间也没有太多关系优先考虑 detail 宽表

(1)数据表:dw_ weblog_ detail

(2)分组字段时间day hour一天当中包含多个小时day 字段比较特殊day 是表分区字段可以通过 where 过滤查找统计完真正有意义起决定作用的是 hour 统计每小时

就是维度一天不是处理昨天也不是处理后天是处理当天因此分组段是时间维度的分组段打开宽表查看最后是以天分区,20181101。

image.png

(3)度量值count(*)

直接统计*就相当于把里面不管是静态资源的请求还是动态资源都当做页面被加载的点击次数想要更加贴近于实战应该加各过滤条件valid 等于 true把静态资源过滤掉由于项目数据本身比较小所以做了妥协但是要清楚背后发生了什么

image.png

跟宽表起别名该数据批次是1000,天是分区字段通过t.分区字段可以找到这一天因此针对天这个指标不需要分组直接通过 where 即可如果数据是干净纯净一定得到的是111日的数据得到这一天的数据还要进行分组得到各个小时一天有24个小时分为24个部分每个部分中再进行 count 统计写的时候要根据小时分组确定表中有没有 hour 字段打开宽表数据查看宽表中有用户标识时间日期monthdayhour可以感受到进行入库时生成宽表就是为了分析的方便现在把hour踢出来变成一个新的字段直接进行 hour 分组即可不管是六点四十九分还是六点五十分的都属于六点就该来到同一分组中

image.png

按照一天中小时分组就会分成24小时每个小时进行 count 统计

select

count(*) as pvs

from dw_weblog_ detail t where t.datestr ="20181101" group by t.hour ;

在 hive 中执行验证得到每个小时的 pvs但是看不出来是哪个小时的pvs所以在查询上显示出属于哪个小时需要把 hour 字段出现在 select 表中注意group by 分组语法因为 hour 是分组字段所以可以出现在表达式中再执行在七八九小时中pvs 点击比较多大概在早上的七八点钟网站的访问量比较多可能是新闻门户类的网站早高峰大家都在浏览

image.png

但是如果写完就结束意味着数据并没有保存下来输入 show tables 进行查看计算的指标并没有保存在数仓中因此在实际的开发过程中指标和模型数据为了方便临时表记录下来需要时就不用再执行 sql直接用即可。

4创建中间表也叫临时表有个小技巧就是创建临时表或者别的表不要用汉语拼音进行命名比如 time1,time2在企业中一般建议用简单的英文表示表的含义比如创建一个表一天当中每个小时的 pvs这个表是一个分区表根据时间进行分区

drop table dw_ pvs_ everyhour_ oneday;

create table dw_ pvs_ everyhour_ oneday (month string,day string,hour string,pvs bigint) partitioned by (datestr string) ;

insert into table dw_ pvs_everyhour_oneday partition (datestr= '20181101')

select a.month as month,a.day as day,a.hour as hour, count(*) as pvs from dw_ weblog_ detail a 在宽表进行操作分区过滤

Where a.datestr='20181101' group by a . month,a.day,a . hour; 注意分组字段对结果的影响

计算每天的 pvs

drop table dw_ pv3_ everyday;

create table dw_ pvs_ everyday (pvs bigint , month string,day string) ;

insert into table dw_ pv3_ everyday

select count(*) as pvs,a.month as month,a.day as day from dw_ weblog_ detail a group by a . month,a.day;

复制create table dw_ pvs_ everyhour_ oneday (month string,day string,hour string,pvs bigint) partitioned by (datestr string) ;执行返回的字段有两个一个是 hour一个是 pvs而这个表中是 month需要保证查询反馈的结果字段类型顺序个数跟它对应上

要想返回 month day hour 比较简单因为数据表中正好有 month day如果分组字段不错

select

t.day,t.hour ,count(*) as pvs

from dw. _weblog detail t where t.datestr ="20181101" group by t.hour;

执行后报错在 compiling 编译期间的错误,Invalid column referenceday‘非法的字段引用day

--直接报错Invalid column referenceday‘

--想一想sql 语句 groupby 有什么样的语法限制问题

出现在 groupby 语句表达式中的字段要么是分组的字段要么是被聚合函数包围应用的字段这是所谓的语法限制

需要进行相关的调整不能这样引用day 既不是分组的字段也不是聚合函数包围的字段如果直接写 t.month t.day 肯定会报错需要针对两个字段进行调整比如放在分组字段 groupby 后面本意是根据 hour 进行分组结合具体环境进行分析在当下环境中加入分组字段不会改变结果因为 where 指定过滤是20181101的数据如果数据干净整洁纯洁没有被污染的数据保证得到的是20181101这一天的数据根据月份分是11月一个整体根据day分还是1号整体因此字段的出现保证了 month day 对结果没有影响最终起决定作用的是 hour它俩的出现保证字段可以出现在前面不会报错执行

image.png

在数据中人为的把一号变成了二号对于后面的指标计算比较方便

5、把查询结果插入到创建的 pvs everyhour 中分组根据 month day hour 进行分组三个中真正起决定作用的是 hourmonthday 无效但是可以出现在表达式中统计 pvs四个字段拆入到创建的表中完成数据保证复制到 hive 终端执行看结果打开临时表看数据有没有保存进去select * from dw pvs_ everyhour_ oneday;显示每一天的 pvs 数十一月中每个小时产生的 pvs可以进行最终页面的报表展示第一个需求是统计每个小时的 pvs重点是 sql 语句语法的掌握灵活运用到业务中

image.png

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
9月前
|
Linux 应用服务中间件 PHP
性能工具之linux常见日志统计分析命令
通过本文的介绍,我相信同学们一定会发现 linux三剑客强大之处。在命令行中,它还能够接受,和执行外部的 AWK 程序文件,可以对文本信息进行非常复杂的处理,可以说“只有想不到的,没有它做不到的。
216 1
|
3月前
|
存储 运维 监控
API明细日志及运维统计日志全面提升API可运维性
在数字化转型的大潮中,数据已成为企业最宝贵的资产之一。而数据服务API可快速为数据应用提供数据接口。面对越来越多的API以及越来越多的应用调用,如何快速查看API的服务情况、异常情况及影响范围,以及查看API的调用详情,进行API的性能优化、错误排查变得越来越重要,本文将介绍如何配置和开通API运维统计及明细日志,以及如何查看日志进行介绍。
204 0
|
2月前
|
监控 应用服务中间件 定位技术
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
要统计Nginx的客户端IP,可以通过分析Nginx的访问日志文件来实现
233 3
|
4月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
6月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
8月前
|
存储 Java 关系型数据库
基于JSP的九宫格日志网站
基于JSP的九宫格日志网站
|
9月前
|
存储 弹性计算 运维
统计/var/log 有多少个文件
【4月更文挑战第29天】
70 1
|
9月前
|
网络协议 应用服务中间件 Linux
centos7 Nginx Log日志统计分析 常用命令
centos7 Nginx Log日志统计分析 常用命令
323 2
|
9月前
|
存储 弹性计算 监控
日志服务SLS最佳实践:通过SLS数据加工从VPC flowlog中过滤出跨region CEN流量
本文就通过一个客户的实际案例开介绍如何使用在无法直接开启CEN flowlog的情况下,使用SLS的数据加工能力,从VPC flowlog的数据中过滤出客户需要的流量日志出来。
193 0
日志服务SLS最佳实践:通过SLS数据加工从VPC flowlog中过滤出跨region CEN流量
|
6天前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
21 5
图解MySQL【日志】——Redo Log