开发者学堂课程【大数据分析之企业级网站流量运营分析系统开发实战(第四阶段): 网站流量日志分析--统计分析--多维统计分析--时间维度--每天 pv 统计】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/696/detail/12221
网站流量日志分析--统计分析--多维统计分析--时间维度--每天 pv 统计
1、计算每天的 pvs
已经计算出一天当中的每个小时的 pvs,计算每一天就出来了,因此针对指标的计算,可以采用很多方式进行计算。
已经计算出一天当中每个小时的 pvs,比如一点两点三点四点,直接把字段求和即可。
--方式一:dw_pvs_everyhour_oneday
针对每个小时的 pv 进行 sum 求和
Select
sum
(pvs)
from
根据时间分股的表 dw_pvs_everyhour_oneday
where
datestr
=”20181101“
保证得到的是今天的;
打开 hive 终端进行执行,计算结果是13770,采用的是第一种方式,在一天中每小时求和得到一天,把每一天加以来等于每个月,把每个月加起来等于每一年。
2、以宽表为依据,除了它是个普通的数据表,最重要的它是分区表,根据天进行分区,指标要计算天,指标的力度和分区的力度达到一致,打开 node-1-50070,浏览 hive 默认的路径,点击 user,hive,warehouse,itheima.db,dw _weblog_ detail,以天做分区,只有一个分区20181101,只需要统计20181101下的数据即可。
--方式二:dw _weblog_ detail 分区和需求一致 基于分区进行 count 即可
select count (*)from dw_weblog detail where datestr ="20181101";
执行看结果,13770,多种方式计算的好处是可以从侧面见证计算的结果是否正确。
3、现在的表是分区表,可能会产生影响,假如宽表不是分区表,没有根据天进行分区,数据里面每一天,每个小时都有,根据小时分组。
--方式三:如果数据不是分区表,直接根据 day 进行分组,前提是它不是分区表不能进行分组查询。
select
t . month,t. day,count(*) as pvs
from dw_weblog_ detail t where t.datestr ="20181101" group by t . month,t. day;
不需要分组到 hour,去掉 hour,这样写的前提是 t.datestr ="20181101" 表不是分区表,但是客观知道这个表是分区表所以保留,虽然是在1101的分析数据里面,人为的有意识的把一些数据变成了2号,在这个前提下忽略分区的影响看是否能查出每一天的数据,复制在hive中进行执行,按照正常套路,因为加了分区字段根据day进行分,但是没有分,都是1101,为了sql演示方便,强制把一部分数据变成1102,就会得到01数据10777,02数据2993,加起来就是13770的数据,如果一个表的数据不是分区表,或者分区跟查询操作没有过多的需求,需要到哪个力度就直接 groupby 分到哪个力度,这是第三种方式。在弄清楚需求的情况下结合已有的数据,结合表结构可以从不同的思路进行计算,同一个指标也可以验证 sql 计算的结果是否正确。