网站流量日志分析--统计分析--多维统计分析--时间维度--维表关联查询|学习笔记

简介: 快速学习网站流量日志分析--统计分析--多维统计分析--时间维度--维表关联查询

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

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


网站流量日志分析--统计分析--多维统计分析--时间维度--维表关联查询


1、时间维度统计分析通过单表的操作计算出每个小时每一天或者每个月的相关指标另一种方式与时间维表关联查询在数仓模型建立时基于事实表可以关联各种各样不同的维度表在创建本项目的表中指定时间维度表统计时间维度的相关指标将事实表和维度表进行关联查询关联的本质就是两个表进行joinjoin的同时需要指定join的条件需要时间维度进行查询join跟时间相关相关的指标如何通过关联的方式得到结果验证跟单表操作的结果是否一样

2、为了方便,打开参考脚本中的思路脚本时间维度还是计算每一天产生的 pvs但是要求不是单表操作而是和时间维表进行关联操作

3、事实表宽表和维度表进行关联查询

关联查询的重点是确定 join 字段跟时间相关的

计算每天的产生的 pvs。

宽表中的数据有 monthdayhour提出来的字段时间维度表也拆出来看输入select*from t_dim_time; 因为表的数据不大直接显示在时间维表中也有monthdayhour不同的值要进行关联查询会涉及到两个表的字段相等要统计每一天的小时不管是否相等知道天要相等进行指标时要指定 day 等于 daymonth 等于 month无可厚非因为是同一个月关联时必须指定交易条件比如把 a.month,把原来的事实表称为 a实验表称为 bmonth 等于 monthday 等于 day相等的数据关联到一起分组到一块进行统计就是每一天具体的数据,1号关联1,2号关联2就可以统计出来用 join 关联实现整体的思路

image.png

4、sql 的具体实现sql 脚本资料中有一个 sql里面创建了一个中间的临时表保存最终的数据叫 everyday pvs

--维度: 日

drop table dw_ pvs_ everyday ;

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

insert into table dw_ pvs_ everyday

select count(*) as pvs,a.month as month,a.day as day from (select distinct month, day from t_ dim time) a

join dw_ weblog_ detail b

on a.month=b.month and a .day=b.day

group by a . month,a.day;

当分析 sql 语句时重点要确定 from 关键字后面的表以及涉及到的关联如何存在一个表叫做表 a另一个表叫做 表 b 同月同一天经过分组分到同一月同一天进行统计本质不就是用 t_dim_time 和 detail 进行关联为什么还要做去重的操作

5、第一种方式不进行去重看返回是什么结果不进行操作打开 hive 终端去掉 distinct 关键字直接查询select month, day from t dim_ time ;因为一天当中存在各个不同的小时使得同一天可能有多个不去重直接进行关联会有什么效果

image.png

6、左边是事实表的数据,1101,1102,1101,起名为a重点是时间维度表如果不加 distinct 去重join 条件等于 a.month=b.month,一个可以关联多个一天有24个小时如果不加过滤左边的数据会跟右表关联24而且24次都符合关联的条件,24个结果分组时统计就是24pv相当于人为的把数据重复了造成结果的原因很简单一天有24小时在时间维度表中 month 和 day 都等于1101,但是内部还存在零点一点两点不管关联几次只要关联一下就有1101的数据因此在select中针对结果做去重去重后执行再进行 join 就避免了问题当拿1101只会跟1101进行关联相同的数据再加上 group by 分组只要关联上同一 month同一天来到同一分组中做 count 统计得到结果这就是为什么要进行 distinct 去重的原因

image.png

7、在数据中人为的改变了2号的数据看结果是否一样首先执行结果再把结果插入到表中复制打开 hive 终端可以看到访问结果,110110777,11022993,这个指标是否正确查看第一种方式单表操作时每天结果是否正确可以发现结果相同

image.png

8、创建一个表叫 pvs everyday 每一天的 pv 统计创建完之后把查询结果通过insert语句把结果插入到表中insert 加 sql 语句复制执行把结果保存起来便于相关的操作把表验证一下看计算是否正确select from dw_ pvs_ everyday;得到每一天的 pv 数据值后面的页面展示也会方便。

9、为了更好的理解关联查询进行拓展

拓展使用与维度表关联的方式计算每个小时的 pvs

在进行关联时同一天某一 month 不行还需要保证是同一小时才能达到这个结果

select count(*) as pvs,a.month as month,a.day as day from (select distinct month, day from t_ dim time) a

join dw_ weblog_ detail b宽表

on a.month=b.month and a .day=b.day and a. hour=b .hour加条件当写下关联字段时a表和b表有没有hour的字段是否满足join的条件

group by a . month,a.day;

宽表中有 hour 字段

image.png

a 表就是查询语句返回的结果返回语句中并没有 hour 字段a 表中没有并不代表时间维度表中没有 hour 字段,在提取 month 和 day 的同时把 hour 提出来再查询就有 hour符合 a .month= b .month,

select count(*) as pvs ,a. month as month,a.day as day from (select distinct month, day, hour from t_ dim_ time) a

join dw_ weblog_ detailb

on a. month=b . month and a. day=b.day and a. hour=b . hour

group by a.month,a. day;

只要是同一个月同一天同一个小时应该来到同一个分组分组也要进行统计

select count(*) as pvs ,a. month as month,a.day as day,a.hour as hour from

(select distinct month, day, hour from t_ dim_ time) a

join dw_ weblog_ detailb

on a. month=b . month and a. day=b.day and a. hour=b . hour

group by a.month,a. day,a. hour;

复制 sql 语句到 hive 终端中执行可以统计出来跟时间维度表查询统计每一个小时 pvs采用方式一的 sql 语句验证结果是否正确完全正确客观上呼应采用何种方式只要思路是正确的最终的计算结果就是正确的这就是第二种方式虽然指标还是那个指标但是采用两张表进行关联的方式跟时间维度表其他的维度也是一样

只要有需求都可以进行关联从效果或者性能角度优先考虑单表操作再用第二种方式

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
存储 监控 安全
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(1)
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(1)
|
4月前
|
SQL 存储 安全
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(2)
带你读《Apache Doris 案例集》——07查询平均提速700% ,奇安信基于 Apache Doris 升级日志安全分析系统(2)
111 0
|
1月前
|
分布式计算 DataWorks 关系型数据库
DataWorks报错问题之报错“查询运行日志失败"如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
2月前
|
存储 监控 BI
OSS日志查询
实时日志查询功能将OSS与日志服务SLS相结合,允许您在OSS控制台直接查询OSS的访问日志
31 1
|
2月前
|
存储 Prometheus Cloud Native
Grafana 系列文章(十一):Loki 中的标签如何使日志查询更快更方便
Grafana 系列文章(十一):Loki 中的标签如何使日志查询更快更方便
|
3月前
|
监控 安全 前端开发
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
Nginx 访问日志中有 Get 别的网站的请求是什么原因?
36 0
|
4月前
|
SQL 存储 关系型数据库
②⑩ 【MySQL Log】详解MySQL日志:错误日志、二进制日志、查询日志、慢查询日志
②⑩ 【MySQL Log】详解MySQL日志:错误日志、二进制日志、查询日志、慢查询日志
79 0
|
4月前
|
SQL 关系型数据库 MySQL
MySQL优化之慢日志查询
MySQL优化之慢日志查询
52 0
MySQL优化之慢日志查询
|
4月前
|
监控 Java
JVM-如何查询垃圾回收日志
JVM-如何查询垃圾回收日志
|
25天前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
82 1