网站流量日志项目Day03
前言
经过数据的预处理我们此时已经得到了以下源数据
- 原始数据(WEB服务器日志预处理后得到,数据从杂乱变为干净,有序)–>origin
- pageview(基于原始数据预处理后得到,特征是将我们的数据分为一个个的会话,一个会话会包含一个或多个页面面)–>pageview
- visit(基于pageviewde预处理后得到,特征是将我们数据中相同的会话进行分组,添加每一个会话的开始与结束时间)–>visit
数据入库
我们已经得到了我们想要的数据,我们该放哪呢?当然是放到我们的分析性数据仓库中。那么我们该怎么去设计我们的数据仓库(DW)呢?请往下看:
维度建模
维度模型是数据仓库领域大师 Ralph Kimall 所倡导,他的《数据仓库工具箱》,是数据仓库工程领域最流行的数仓建模经典。 维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能 。
维度建模是专门应用于分析型数据库、数据仓库、数据集市建模的方法。数据集市可以理解为是一种”小型数据仓库”。
常见的模型有:星形模型、雪花模型、星座模型
具体设计
本项目采用星形模型,事实表就是经过预处理后的网站日志,维度表取决于业务。
事实表设计
维度表设计
注意注意:
维度表的数据一般要结合业务情况自己写脚本按照规则生成,也可以使用工具生成,方便后续的关联分析。
比如一般会事前生成时间维度表中的数据,跨度从业务需要的日期到当前日期即可.具体根据你的分析粒度,可以生成年,季,月,周,天,时等相关信息, 用于分析。
数据入库过程(ETL)
ETL就是把元数据(ODS)加载到数据仓库(DW)中,期间可能会涉及到数据转换等。当我们所需要的事实表、维度表被填充完毕后ETL的工作就结束了。
创建数据表
要想把数据加载到DW中,我们的DW中需要有对应的表。本项目我们需要先在DW中创建三张表:
- 原始日志数据表
- 点击流模型 pageview 表
- 点击流模型 visit 表
导入数据
利用 hive 中的 以下命令将数据加载进去
load data inpath ‘src’ into table table_name partition by (partition_field='name');
DW中表的处理
明细表、宽表、窄表
事实表的数据中,有些属性共同组成了一个字段(糅合在一起),比如年月日时分秒构成了时间,当需要根据某一属性进行分组统计的时候,需要截取拼接之类的操作, 效率极低。
为了分析方便,可以事实表中的一个字段切割提取多个属性出来构成新的字段,因为字段变多了,所以称为宽表,原来的成为窄表。
又因为宽表的信息更加清晰明细, 所以也可以称之为明细表。