数据仓库,是越来越流行的数据解决方案。传统烟囱式的数据开发模式,显然不能满足日益增长的数据需求,而作为大数据量化方案、解决大数据问题、发掘数据价值的大数据仓库被很多公司采纳使用。想要建设好数据仓库,就要了解数据仓库模型设计及其原理、怎样处理数据仓库建设的需求分析?又如何处理基础数据元和维度表、事实表?下面就来简单谈谈数据仓库。
一、什么是数据仓库?
数据仓库的概念
数据仓库是一个面向主题的、集成的、时变的、非易失的数据集合,用于支持管理决策、商业营销、运营分析。数据仓库实际上是一种数据存储,它将各种异构数据源中的数据集成在一起,并保持其语义一致,为企业决策提供支持。
1.面向主题。在较高层次对数据综合、归类,针对某一分析领域所抽象出来的分析对象。
构建主题的步骤:首先抽象出需要分析的主题域,确定每个主题域需要分析的维度、其所包含哪些数据表。一般主题域所有表都有一个连接键,作为主题的一部分,通过这个连接键可把主题域所有表关联汇总成一张宽表。如会员主题,分为会员基本信息、会员积分数据、会员的资产数据、会员的行为数据、会员的信用等多张表。
2.集成的。数据来源的格式类型不同;编码、命名格式、属性单位不一致,然后对原有数据进行综合、计算。
把不同表、不同类型的数据放入到统一的数据仓库中。如Mysql、Oracle、Redis、Hbase中的数据,我们通过同步全量数据把数据存入统一的系统中。对于增量数据设置定时抽取,可以采用并发架构,多任务同时同步,把数据持续存到我们的分布式文件系统中来。
3.时变的。数据仓库的数据是不同时间的数据集合;随时间变化不断增加、删除、综合数据;数据仓库表结构中一般都带有时间字段。
数据仓库的数据不是一成不变的,它是随着时间变化不断新增内容,更新与时间有关的综合数据,这些数据一般都包含有时间字段。
4.稳定非易失的。.数据仓库中的数据一般只插入新增,不做update更新、delete删除操作。
数据是经过抽取而形成的分析型数据,不具有原始性(不是第一手数据,一般是经过其他数据源或业务系统,抽取到数据仓库中),主要供企业决策分析之用,执行的主要是查询操作,一般情况下不执行更新操作。抽到数据仓库的数据在ODS层不做任何操作,来保持数据的原始性(不改变字段属性,不补值等操作)。
二、数据仓库建模理论
数据一般用于两种目的,一种是基于操作型记录保存,一种是分析决策的制定。简单来说,前者是操作系统保存数据(OLTP-联机事务处理),一般仅反映数据的最新状态,按单条记录事务性来处理数据;其优化的核心是更快地处理事务;后者是分析系统使用数据(OLAP-联机事务分析),按大批量方式处理数据;其核心是高性能、多维度处理数据。针对两种不同的数据用途,如何组织数据,高效的使用数据,这里就涉及到数据建模的问题。
2.1、什么是Inmon范式模型?
数据仓库是商业智能的一部分,一家企业或公司只有一个数据仓库,数据集市的信息皆来源数据仓库。现在的数据库大多数都是依据3FN范式来建立的,而依据范式的思想来进行数据仓库建模,就是范式建模。数据仓库中的数据信息必须符合第三范式。
范式是关系型数据库的基本概念。是指符合某些条件、符合某些规则的关系集合。范式是分级的,每向上一级,条件和规则更加严格,每一级是下一级的子集。
范式最主要的目的是消除冗余,每一份信息必须存放一次,也只能存储一次。数据的冗余不仅仅会造成存储资源的浪费,而且可能会引发数据的更新异常。
2.2、什么是Kimball维度建模?
数据仓库是公司内部所有数据集市的集合,信息总是被存储在多维模型中。是面向数据集市、数据主题的,一般采用星型模型建模。依据星型模型,构建事实表和维度表,建立数据仓库模型的过程,就是维度建模。Kimball的核心思想就是星型模型和维度建模。
2.2.1、什么是星型模型?
所有的表直接与事实表关联,整个图解就像星星一样,该模型称为星型模型。星型模型是一种非正规化的结构,是反范式的。因为多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余,
星型模型
2.3、事实表和维度表
事实表描述业务过程的度量、以可加数据为主题,每一行代表一个可以观察的实体或事件。主要的是发生了业务过程,如卖出一件商品,用户购买一件商品,这都触发了业务过程。卖出的商品有商品属性、有卖出的门店、有出货记录,有购物者信息等等。
维度表描述事实所处的环境、面向分析,代表针对事实的一种分类。直白点,维度表就是用来描述事实的。还以卖出商品为例,卖出的商品,商品有属性,包括颜色、尺码、风格、季节等多种属性,这些属性组合在一起就构成了描述商品的维度表。
对维度表再建立更细的维度,称为支架表。支架表是维度表的维度表,支架表是去冗余的产物,在星型模型中,对冗余很宽容。所以支架并不是必须的,并且应该尽量少用。合适的方法是:将支架表合并到和事实表直接连接的维度表。
注意:维度表中需要注意维度退化和缓慢变化维
退化维度:在维度类型中,有一种重要的维度称作为退化维度,亦称维度退化。这种维度指的是直接把一些简单的维度放在事实表中。维度退化是维度建模领域中的一个非常重要的概念,它对理解维度建模有着非常重要的作用,维度退化一般在分析中可以用来做分组使用。
缓慢变化维:维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维。
常用处理缓慢变化维的方式:用户变更手机号码
EX1,直接覆盖原值。
直接覆盖原值
EX2,增加维度行。
增加新行
在增加新行时,需为其分配新的代理键。并且,至少需要在维度行再增加三列:有效日期、结束日期、行状态,可以使用拉链表处理。
EX3,增加新的属性列。
增加属性列
2.2、什么是雪花模型?
当有维表没有直接连接到事实表上,而是通过连接其他维表间接连接到事实表,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,把原有的维表进一步拓展,形成更多细分层次。
处理雪花模型的方式,和支架表一样,理想的模型是只存在和事实表直接相连接的维度表。在数据仓库中,数据冗余不重要,连接性能更重要!我们通过牺牲空间来换取时间,这些数仓很常用的手段。
雪花模型
雪花模型是一种规范的数据建模模型,规范化的目的是去冗余,在节省存储的同时减少重复更新。但是对于数据仓库来说,这两者都不重要,数据仓库本来就不更新。Kimball模式的数据仓库的查询性能优先!星型模型,是反范式的
总结:数据仓库建模过程是一个很复杂的过程,一方面不仅要根据自家业务处理建模需要,一方面还要深入了解建模的理论基础。