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

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

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

课程地址: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日志并进行多维度分析。
相关文章
|
6天前
|
存储 人工智能 JSON
RAG Logger:专为检索增强生成(RAG)应用设计的开源日志工具,支持查询跟踪、性能监控
RAG Logger 是一款专为检索增强生成(RAG)应用设计的开源日志工具,支持查询跟踪、检索结果记录、LLM 交互记录和性能监控等功能。
28 7
RAG Logger:专为检索增强生成(RAG)应用设计的开源日志工具,支持查询跟踪、性能监控
|
5月前
|
存储 监控 Serverless
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
阿里泛日志设计与实践问题之Grafana Loki在日志查询方案中存在哪些设计限制,如何解决
|
3月前
|
Web App开发 存储 监控
iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
本文为 iLogtail 开源两周年的实践案例分享,讨论了 iLogtail 作为日志采集工具的优势,包括它在性能上超越 Filebeat 的能力,并通过一系列优化解决了在生产环境中替换 Filebeat 和 Logstash 时遇到的挑战。
149 14
|
5月前
|
SQL 存储 JSON
更快更强,SLS 推出高性能 SPL 日志查询模式
从海量的日志数据中,按照各种灵活的条件进行即时查询搜索,是可观测场景下的基本需求。本文介绍了 SLS 新推出的高性能 SPL 日志查询模式,支持 Unix 风格级联管道式语法,以及各种丰富的 SQL 处理函数。同时通过计算下推、向量化计算等优化,使得 SPL 查询可以在数秒内处理亿级数据,并支持 SPL 过滤结果分布图、随机翻页等特性。
12403 116
|
7月前
|
SQL 监控 关系型数据库
|
4月前
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
147 20
|
5月前
|
存储 消息中间件 人工智能
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
早期 MiniMax 基于 Grafana Loki 构建了日志系统,在资源消耗、写入性能及系统稳定性上都面临巨大的挑战。为此 MiniMax 开始寻找全新的日志系统方案,并基于阿里云数据库 SelectDB 版内核 Apache Doris 升级了日志系统,新系统已接入 MiniMax 内部所有业务线日志数据,数据规模为 PB 级, 整体可用性达到 99.9% 以上,10 亿级日志数据的检索速度可实现秒级响应。
AI大模型独角兽 MiniMax 基于阿里云数据库 SelectDB 版内核 Apache Doris 升级日志系统,PB 数据秒级查询响应
|
3月前
|
监控 网络协议 CDN
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
阿里云国际监控查询流量、用量查询流量与日志统计流量有差异?
|
5月前
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
|
6月前
|
分布式计算 资源调度 DataWorks
MaxCompute操作报错合集之出现“查询运行日志失败”的报错,一般是什么导致的
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
下一篇
开通oss服务