数据仓库核心概念
数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。
关于其定义,数据仓库之父比尔·恩门(Bill Inmon)在1991年出版的“Building the Data Warehouse”(《建立数据仓库》)一书中所提出的定义一直被广泛接受:数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。
数据仓库特点:
1、面向主题 Subject Oriented
数据仓库中的数据是按照一定的主题域进行组织。主题是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常与多个操作型信息系统相关。例如:传统的操作型系统是围绕公司的应用进行组织的。对一个保险公司来说,应用问题可能是汽车保险、健康保险、人寿保险与意外伤亡保险;公司的主要主题范围可能是顾客、保险单、保险费与索赔。
2、集成 Integrated
数据仓库中存储的数据是来源于多个数据源的集成,原始数据来自不同的数据源,存储方式各不相同。当数据进入数据仓库时,要采用某种方法来消除应用问题中的许多不一致性。例如,在图中,考虑关于“性别”的编码,在数据仓库中是编码为m/f还是1/0并不重要,重要的是,无论什么原始应用问题,无论数据仓库如何进行编码,在数据仓库中应该一致地进行编码。如果应用数据编码为X/Y,当其进入数据仓库时就要进行转换。对所有的应用设计问题都要考虑同样的一致性处理,比如命名习惯、键码结构、属性度量以及数据特点等。
3、非易失 Non-Volatile
数据仓库中保存的数据是一系列历史快照,不允许被修改。用户只能通过分析工具进行查询和分析。如图中,表示了操作型数据正规地是一次访问和处理一个记录。可以对操作型环境中的数据进行更新。但数据仓库中的数据呈现出非常不同的特性。数据仓库的数据通常是一起载入与访问的,但在数据仓库环境中并不进行一般意义上的数据更新。
4、反映历史变化 Time Variant (时变性)
数据仓库的数据是随时间而变化的,会定期接收新的集成数据,从而反应可以出最新的数据变化。但稳定的数据是以只读格式保存,且不随时间改变。时变性可以从以下几个方面来考虑:
a、数据仓库中的数据时间期限要远远长于操作型系统中的数据时间期限。操作型系统的时间期限一般是60-90天,而数据仓库中数据的时间期限通常是5-10年。
b、操作型数据库含有“当前值”的数据,这些数据的准确性在访问时是有效的,同样当前值的数据能被更新。而数据仓库中的数据仅仅是一系列某一时刻生成的复杂的快照。
c、操作型数据的键码结构可能包含也可能不包含时间元素,如年、月、日等。而数据仓库的键码结构总是包含某时间元素。
数据库是面向事务的设计,设计目的是为了捕获数据,一般存储在线交易数据,并且在设计时尽量避免冗余,常采用符合范式的规则来设计。
数据仓库是面向主题设计的,设计目的是为了分析数据,一般存储的是历史数据,但在设计时有意引入冗余,采用反范式的方式来设计。
ETL(Extract-Transform-Load),用来描述将数据从来源端经过抽取(extract)、交互转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。
ETL是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。
大数据场景下,常用的ETL工具有:Logstash、Kettle、Kafka、Sqoop等等。
在数据仓库中,经过ETL清洗完成的数据会加载到下一个目的地——ODS。
ODS(Operational Data Store,ODS),当需要堆积成数据进行在线事务处理时,就需要一种不同类型的数据结构,这就需要用到作业数据存储。
需要ODS的原因有很多种:
1、就是其作业系统是非集成且难以处理的。出于多种原因,组织有时会面对这样的情形:他们拥有的是未集成的作业系统,而且这些作业系统无法进行重写或者改造。当组织需要集成数据并且无法修改或者改造其已有的系统环境时,就需要用到ODS
2、组织有时候需要对集成数据进行在线更新。因为数据仓库无法支持在线更新,所以无论出于何种原因,能够进行在线更新的地方就是ODS。
作业应用程序可以将其事务处理数据发送给ODS、或者通过ETL接口发送,当数据进入ODS之后,还会有一个接口针对数据仓库的接口。将数据装载到ODS之后,就可以在那里进行在线事务处理了。ODS环境建立起来,就可以支持高性能在线事务处理了,此外,ODS中的数据也会被集成。
ODS的作用一般有以下三点:
1、在业务系统和数据仓库之间形成一个隔离层。一般的数据仓库应用系统都具有非常复杂的数据来源,这些数据存放在不同的地理位置、不同的数据库、不同的应用之中,从这些业务系统对数据进行抽取并不是一件容易的事。因此,ODS用于存放从业务系统直接抽取出来的数据,这些数据从数据结构、数据之间的逻辑关系上都与业务系统基本保持一致,因此在抽取过程中极大降低了数据转化的复杂性,而主要关注数据抽取的接口、数据量大小、抽取方式等方面的问题。
2、转移一部分业务系统细节查询的功能。在数据仓库建立之前,大量的报表、分析是由业务系统直接支持的,在一些比较复杂的报表生成过程中,对业务系统的运行产生相当大的压力。ODS的数据从粒度、组织方式等各个方面都保持了与业务系统的一致,那么原来由业务系统产生的报表、细节数据的查询自然能够从ODS中进行,从而降低业务系统的查询压力。
3、完成数据仓库中不能完成的一些功能。一般来说,带有ODS的数据仓库体系结构中,DW层所存储的数据都是进行汇总过的数据,并不存储每笔交易产生的细节数据,但是在某些特殊的应用中,可能需要对交易细节数据进行查询,这时就需要把细节数据查询的功能转移到ODS来完成,而且ODS的数据模型按照面向主题的方式进行存储,可以方便地支持多维分析等查询功能。
ODS和数据仓库DW对比起来,相同点是两者都包含了面向主题的、集成的信息。区别在于ODS的数据可以单独进行更新、删除和添加,而数据仓库包含了非易失的数据。并且,数据仓库中还包含了数据的快照,一旦数据快照、数据仓库中的数据就不会变化了。因为,就易失性而言,数据仓库和ODS是极为不同的。
ODS和数据仓库之间的另一个区别在于:不同的环境中数据的时效性有所不同。数据仓库中存储的数据经过了很长一段时间,一个数据仓库中保存5-10年的数据资产是非常正常的。然而,一个ODS中很少会保存超过30天的数据资产。因此,数据仓库和ODS在保存的历史数据规模上有着很大差别。
数据集市(Data Mart,DM)为了满足特定的部门或者用户的需求,按照多维的方式进行存储,包括定义维度、需要计算的指标、维度的层次等,生成面向决策分析需求的数据立方体。
数据集市主要是针对一组特定的某个主题域、部门或者特殊用户需求的数据集合。这些数据需要针对用户的快速访问和报表展示进行优化,优化的方式包括对数据进行轻量级汇总,在数据结构的基础上创建索引。数据集市的目标分析过程包括对数据集市的需求进行拆分,按照不同的业务规则进行组织,将与业务主题相关的实体组织成主题域,并且对各类指标进行维度分析。如图所示,按照不同业务需求划分为“市场营销部门”、“金融部门”、“销售部门”、“财务部门”等不同的“集市”来完成具体业务下各类指标的多维分析。