【Juicy-Bigdata】数据仓库
【Juicy-Bigdata】数据仓库
余生杂货铺数据仓库概念
数据仓库(Data Warehouse)是一个面向主题的、集成的、稳定的且随时间变化的数据集合,用于支持管理人员的决策
- 面相主题
传统数据库主要是为应用程序进行数据处理,未必会按照同一主题存储数据;
数据仓库侧重于数据分析工作,是按照主题存储的。
- 集成
传统数据库通常与某些特定的应用相关,数据库之间相互独立。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
- 稳定
传统数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供企业决策分析使用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
- 变化
数据仓库中的数据通常包含历史信息,它里面记录了企业从过去某一时间点(如开始应用数据仓库的时间)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出分析和预测。
数据仓库不是静态的概念,只有把信息及时交给需要这些信息的使用者,供他们做出改善其业务经营的决策,信息才能发挥作用,信息才有意义。
而把信息加以整理归纳和重组,并及时提供给相应的管理决策人员,是数据仓库的根本任务。
数据仓库基础知识
事实表与维度表
- 事实表
事实表是指保存了大量业务数据的表,或者说保存了一些真实的行为数据的表
- 维度表
维度其实指的就是一个对象的属性或者特征,例如:时间维度,地理区域维度
数据库三范式
- 第一范式1NF
数据库表的每一列都是不可分割的原子数据项
- 第二范式2NF
数据库表中每一列都和主键相关,不能只和主键的某一部分相关(针对联合主键而言)
应该将班级信息和成绩信息进行拆分
- 第三范式3NF
一个数据库表中不包含已在其它表中包含的非主键字段,表中的某些字段信息,如果能够被推导出来,就不应该单独的设计一个字段来存放(能尽量外键join就用外键join)
维度建模模型
Ralph Kimball提出的数仓理论中,提出了维度建模,将数据仓库中的表划分为事实表和维度表。
基于事实表和维度表进行维度建模。
雪花模型
维度表的设计更加规范,一般符合3NF
针对商品维度表外层又拆分出来了一个商品类目的维度表,这样拆分之后其实就满足第三范式了,但是这样就变的复杂了,后期在获取商品维度数据的时候,还需要关联这个商品类目维度表。
星型模型
只能满足第二范式,是不满足第三范式的。
但是这样的好处是查询效率比较高,在查询的时候不需要关联很多张表。
缺点就是数据有冗余
雪花模型VS星型模型
冗余:雪花模型符合逻辑设计、3NF规范,降低护数据冗余;星型模型没有符合3NF,维度直接不直接相关,牺牲部分存储空间
性能:雪花模型存在关联,在使用中需要连接各个表,性能偏低。星型模型采用降维的方式将维度进行整合,以存储空间为代价提高了性能。
在实际使用中,侧重于查询,使用星型模型的情况比较多
数据仓库分层
为什么要分层
在管理数据的时候,对数据有一个更加清晰的掌握
- 清晰的数据结构
- 数据血缘追踪,快速定位问题
- 减少重复开发,开发一些通用的中间数据层
- 把复杂问题简单化,将复杂任务分解为多个步骤完成
- 屏蔽业务的影响,不必改一次业务就重新接入数据
数据仓库分层设计
- ODS层:原始数据层(TextFile)
- DWD层:明细数据层,数据清洗,解决数据质量和完整性问题 (ORC+Snappy)
- DWS层:进行轻度聚合,生成中间表
- APP层:根据业务需要统计出的结果,数据导出到Mysql供线上系统使用。也称DM层
DWD数据清洗原则
- 数据唯一性校验,取出重复数据
- 数据完整性校验,缺失字段不全或去掉
- 数据合法性校验,null等异常值
- 数据合理性校验,用户年龄为负数的情况等
数据仓库命名规范
- 每一层在Hive中的创建数据库,用标识符表明,ods_mall,同一层的表放到一个数据库里
- 表名也使用标识符开头,ods_user
- 临时表,_tmp结尾,备份表,_bak结尾
典型的数据仓库系统架构
1:数据采集平台,这个模块主要负责采集各种数据源的数据
2:数据仓库,这个模块负责数据存储和管理
3:数据报表,这个模块其实就是数据可视化展示了