本文仅仅包含数据仓库系统的搭建,其他内容请关注我的博客!在<项目>专栏里!!!
本篇文章参考尚硅谷大数据项目写成!
目录
一、数据仓库系统
1.1基础概念
1.1.1数据分层的好处
1.把复杂问题简单化,将复杂的任务分解成多层来完成,每一层只处理简单任务,方便定位问题。
2.减少重复开发,规范数据分层,通过中间层数据,能够减少极大的重复计算,增加一次计算结果的复用性。
3.隔离原始数据:不论是数据的异常还是数据的敏感性,使真实数据与统计数据解耦开。
1.1.2数据分层
ODS:原始数据层,存放原始数据,直接加载原始日志、数据,数据保持原貌不做处理。
DWD:对ODS层数据进行清洗(去除空值,脏数据,超过极限范围的数据)、维度退化脱敏等。
DWS:以DWD为基础,按天进行轻度汇总。
DWT:以DWS为基础,按主题进行汇总。
ADS:为各种报表提供数据。
1.1.3数据集市和数据仓库
1.数据集市(Data Market),现在市面上的公司和书籍都对数据集市有不同的概念。
2.数据集市则是一种微型的数据仓库,它通常有更少的数据,更少的主题区域,以及更少的历史数据,因此是部门级的,一般只能为某个局部范围内的管理人员服务。
3.数据仓库是企业级的,能为整个企业各个部门的运行提供决策支持手段。
1.1.4OLTP和OLAP
联机事务处理OLTP(on-line transaction processing):是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。
联机分析处理OLAP(On-Line Analytical Processing):是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
二者的主要区别对比如下表所示:
对比属性 | OLTP | OLAP |
读特性 | 每次查询只返回少量记录 | 对大量记录进行汇总 |
写特性 | 随机、低延时写入用户的输入 | 批量导入 |
使用场景 | 用户,Java EE项目 | 内部分析师,为决策提供支持 |
数据表征 | 最新数据状态 | 随时间变化的历史状态 |
数据规模 | GB | TB到PB |
1.1.5关系建模与维度建模
1.关系建模
关系模型严格遵循第三范式(3NF),较为松散、零碎,物理表数量多,而数据冗余程度低。由于数据分布于众多的表中,这些数据可以更为灵活地被应用,功能性较强。
关系模型主要应用与OLTP系统中,为了保证数据的一致性以及避免冗余,所以大部分业务系统的表都是遵循第三范式的。
2.维度建模
维度模型主要应用于OLAP系统中,通常以某一个事实表为中心进行表的组织,主要面向业务,特征是可能存在数据的冗余,但是能方便的得到数据。
关系模型虽然冗余少,但是在大规模数据,跨表分析统计查询过程中,会造成多表关联,这会大大降低执行效率。所以通常我们采用维度模型建模,把相关各种表整理成事实表和维度表两种。
1.1.6事实表和维度表
1.事实表
事实表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。“事实”这个术语表示的是业务事件的度量值(可统计次数、个数、金额等)。
1.1事务型事实表
以每个事务或事件为单位,例如一个销售订单记录,一笔支付记录等,作为事实表里的一行数据。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。
1.2周期型快照事实表
周期型快照事实表中不会保留所有数据,只保留固定时间间隔的数据,例如每天或者每月的销售额,或每月的账户余额等。
例如购物车,有加减商品,随时都有可能变化,但是我们更关心每天结束时这里面有多少商品,方便我们后期统计分析。
1.3累积型快照事实表
累计快照事实表用于跟踪业务事实的变化。
例如,数据仓库中可能需要累积或者存储订单从下订单开始,到订单商品被打包、运输、和签收的各个业务阶段的时间点数据来跟踪订单声明周期的进展情况。当这个业务过程进行时,事实表的记录也要不断更新。
2.维度表
一般是对事实的描述信息。每一张维表对应现实世界中的一个对象或者概念。 例如:用户、商品、日期、地区等。
例如,2020年5月21日,宋宋老师在京东花了250块钱买了一瓶海狗人参丸。维度表:时间、用户、商品、商家。事实表:250块钱、一瓶
1.1.7维度建模分类
在维度建模的基础上又分为三种模型:星型模型、雪花模型、星座模型。
1.星型模型
当所有维表都直接连接到“ 事实表”上时,整个图解就像星星一样,故将该模型称为星型模型。 星型是一种架构非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余。
星型模型有以下特点:
1)维度表只和事实表关联,维度表之间没有关联;
2)每个维表的主码为单列,且该主码放置在事实表中,作为两边连接的外码;
3)以事实表为核心,维表围绕核心呈星形分布;
2.雪花模型
当一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的"层次"区域,这些被分解的表都连接到主维度表而不是事实表。
优点:通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数据冗余。
特点:
1)将星形模式的大维度表拆分未小维度表,满足规范化设计,但不利于开发。
星型模型与雪花模型两者对比:
星型模型因为数据的冗余所以很多统计查询不需要做外部的连接,因此一般情况下效率比雪花型模型要高。在冗余可以接受的前提下,实际运用中星型模型使用更多,也更有效率。 在雪花模型中,数据模型的业务层级是由一个不同维度表主键-外键的关系来代表的。而在星形模型中,所有必要的维度表在事实表中都只拥有外键。
3.星座模式
星座模式是星型模式的扩展
特点:
星型模型和雪花模型都是基于多维表对应事实表,有的时候一个维度表可能被多个事实表用到,这个时候就需要采用星座模式。
三种模型的对比:
雪花模型是将星型模型的维度表进一步划分,使得各维度表满足规范化设计。而星座模型允许星型模型中出现多个事实表,更符合实际业务需求。 雪花模型使得维度分析更加容易。
1.1.8数据仓库建模
1.ODS层
数据:HDFS用户行为数据、HDFS业务数据
1)保持数据原貌不做任何修改,起到备份数据的作用;
2)数据采用压缩,减少磁盘存储空间;
3)创建分区表,防止后续的全表扫描
2.DWD层
DWD层需构建维度模型,一般采用星型模型,呈现的状态一般为星座模型。
维度建模一般按照以下四个步骤:
选择业务过程→声明粒度→确认维度→确认事实
1)选择业务过程
在业务系统中,挑选我们感兴趣的业务线,比如下单业务,支付业务,退款业务,物流业务,一条业务线对应一张事实表。
(1)中小公司,尽量把所有业务过程都选择。
(2)大公司(1000多张表),选择和需求相关的业务线。
2)声明粒度
数据粒度:数据仓库的数据中保存数据的细化程度或综合程度的级别。
声明粒度意味着精确定义事实表中的一行数据表示什么,应该尽可能选择最小粒度,以此来应各种各样的需求。
典型的粒度声明如下:
订单事实表中一行数据表示的是一个订单中的一个商品项。
支付事实表中一行数据表示的是一个支付记录。
3)确定维度
维度的主要作用是描述业务是事实,主要表示的是“谁,何处,何时”等信息。
确定维度的原则是:后续需求中是否要分析相关维度的指标。
例如,需要统计,什么时间下的订单多,哪个地区下的订单多,哪个用户下的订单多?需要确定的维度就包括:时间维度、地区维度、用户维度。
4)确定事实
此处的“事实”一词,指的是业务中的度量值(次数、个数、件数、金额,可以进行累加)。例如订单金额、下单次数等。
在DWD层,以业务过程建模驱动,基于每个具体业务过程的特点,构建最细粒度的明细层事实表。事实表可做适当的宽表化处理。
事实表和维度表的关联比较灵活,但是为了应对更复杂的业务需求,可以将能关联上的表尽量关联上。如何判断是否能够关联上呢?在业务表关系图中,只要两张表能通过中间表能够关联上,就说明能关联上。
至此,数据仓库的维度建模已经完毕,DWD层是以业务过程为驱动。
DWS层、DWT层和ADS层都是以需求为驱动,和维度建模已经没有关系了。
DWS和DWT都是建宽表,按照主题去建表。主题相当于观察问题的角度。对应着维度表。
3.DWS层和DWT层
DWS层和DWT层统称宽表层,这两层的设计思想大致相同,通过以下案例进行阐述。
1)问题引出:两个需求,统计每个省份订单的个数、统计每个省份订单的总金额
2)处理办法:都是将省份表和订单表进行join,group by省份,然后计算。同样数据被计算了两次,实际上类似的场景还会更多。
那怎么设计能避免重复计算呢?
针对上述场景,可以设计一张地区宽表,其主键为地区ID,字段包含为:下单次数、下单金额、支付次数、支付金额等。上述所有指标都统一进行计算,并将结果保存在该宽表中,这样就能有效避免数据的重复计算。
3)总结:
(1)需要建哪些宽表:以维度为基准。
(2)宽表里面的字段:是站在不同维度的角度去看事实表,重点关注事实表聚合后的度量值。
(3)DWS和DWT层的区别:DWS层存放的所有主题对象当天的汇总行为,例如每个地区当天的下单次数,下单金额等,DWT层存放的是所有主题对象的累积行为,例如每个地区最近7天(15天、30天、60天)的下单次数、下单金额等。
4.ADS层
对电商系统各大主题指标分别进行分析。
1.2软件工具的安装配置
1.2.1安装datagrip
(可以不安装,依照个人的习惯)
安装datagrip以及datagrip连接hive_一个人的牛牛的博客-CSDN博客
1.3系统搭建
1.3.1数据仓库搭建ODS层
1.3.2数据仓库搭建DWD层
1.3.3数据仓库搭建DWS层
1.3.4数据仓库搭建DWT层
1.3.5数据仓库搭建ADS层
完成!!!
作者水平低,如有错误,恳请指正!谢谢!!!!!
本文参考于:
尚硅谷大数据项目!