【Juicy-Bigdata】数据仓库

数据仓库概念

数据仓库(Data Warehouse)是一个面向主题的、集成的、稳定的且随时间变化的数据集合,用于支持管理人员的决策

  • 面相主题

传统数据库主要是为应用程序进行数据处理,未必会按照同一主题存储数据;
数据仓库侧重于数据分析工作,是按照主题存储的。

  • 集成

传统数据库通常与某些特定的应用相关,数据库之间相互独立。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。

  • 稳定

传统数据库中的数据通常实时更新,数据根据需要及时发生变化。数据仓库的数据主要供企业决策分析使用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。

  • 变化

数据仓库中的数据通常包含历史信息,它里面记录了企业从过去某一时间点(如开始应用数据仓库的时间)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出分析和预测。

数据仓库不是静态的概念,只有把信息及时交给需要这些信息的使用者,供他们做出改善其业务经营的决策,信息才能发挥作用,信息才有意义。

而把信息加以整理归纳和重组,并及时提供给相应的管理决策人员,是数据仓库的根本任务。

数据仓库基础知识

事实表与维度表

  • 事实表

事实表是指保存了大量业务数据的表,或者说保存了一些真实的行为数据的表

图片描述
  • 维度表

维度其实指的就是一个对象的属性或者特征,例如:时间维度,地理区域维度

图片描述

数据库三范式

  • 第一范式1NF

数据库表的每一列都是不可分割的原子数据项

图片描述
  • 第二范式2NF

数据库表中每一列都和主键相关,不能只和主键的某一部分相关(针对联合主键而言)

图片描述

应该将班级信息和成绩信息进行拆分

  • 第三范式3NF

一个数据库表中不包含已在其它表中包含的非主键字段,表中的某些字段信息,如果能够被推导出来,就不应该单独的设计一个字段来存放(能尽量外键join就用外键join)

图片描述

维度建模模型

Ralph Kimball提出的数仓理论中,提出了维度建模,将数据仓库中的表划分为事实表和维度表。
基于事实表和维度表进行维度建模。

雪花模型

维度表的设计更加规范,一般符合3NF

针对商品维度表外层又拆分出来了一个商品类目的维度表,这样拆分之后其实就满足第三范式了,但是这样就变的复杂了,后期在获取商品维度数据的时候,还需要关联这个商品类目维度表。

图片描述

星型模型

只能满足第二范式,是不满足第三范式的。
但是这样的好处是查询效率比较高,在查询的时候不需要关联很多张表。
缺点就是数据有冗余

图片描述

雪花模型VS星型模型

冗余:雪花模型符合逻辑设计、3NF规范,降低护数据冗余;星型模型没有符合3NF,维度直接不直接相关,牺牲部分存储空间

性能:雪花模型存在关联,在使用中需要连接各个表,性能偏低。星型模型采用降维的方式将维度进行整合,以存储空间为代价提高了性能。

在实际使用中,侧重于查询,使用星型模型的情况比较多

数据仓库分层

为什么要分层

在管理数据的时候,对数据有一个更加清晰的掌握

  • 清晰的数据结构
  • 数据血缘追踪,快速定位问题
  • 减少重复开发,开发一些通用的中间数据层
  • 把复杂问题简单化,将复杂任务分解为多个步骤完成
  • 屏蔽业务的影响,不必改一次业务就重新接入数据

数据仓库分层设计

图片描述
  1. ODS层:原始数据层(TextFile)
  2. DWD层:明细数据层,数据清洗,解决数据质量和完整性问题 (ORC+Snappy)
  3. DWS层:进行轻度聚合,生成中间表
  4. APP层:根据业务需要统计出的结果,数据导出到Mysql供线上系统使用。也称DM层

DWD数据清洗原则

  1. 数据唯一性校验,取出重复数据
  2. 数据完整性校验,缺失字段不全或去掉
  3. 数据合法性校验,null等异常值
  4. 数据合理性校验,用户年龄为负数的情况等

数据仓库命名规范

  1. 每一层在Hive中的创建数据库,用标识符表明,ods_mall,同一层的表放到一个数据库里
  2. 表名也使用标识符开头,ods_user
  3. 临时表,_tmp结尾,备份表,_bak结尾

典型的数据仓库系统架构

图片描述

1:数据采集平台,这个模块主要负责采集各种数据源的数据
2:数据仓库,这个模块负责数据存储和管理
3:数据报表,这个模块其实就是数据可视化展示了