一、什么是数据仓库?
其实很多企业做数据仓库的时候,都忽略了数仓与BI、数据库的差异,只去搞底层数据,不去做数据服务和应用,其实就是把数据仓库给狭义化了。
其实数据仓库可以看成是BI的基础版本、数据库的升级版本,我们可以把公司里的数据都想象成一个个文件夹,数据库就是这一个个文件柜,这个文件柜存放着非常多的数据,无论这个数据是什么、或者是如何组织的。
而当我们的文件非常多、种类非常复杂的时候,我们的就想要寻找某个文件夹的时候,如果每个文件柜每个文件柜的去找,实际上是非常耗费成本的,因此我们不妨建立一个档案室,对不同的文件柜进行编号、归类、分组,方便我们快速定位数据源,这个档案室就是数据仓库。
所以这时候我们需要更为庞大的数据仓库,帮助我们去对多个数据源的数据库数据进行抓取,而抓取数据源的过程就可以理解为ETL的工作,这样去理解一个企业的数据架构就会简单很多。
因此数据仓库的本质,其实就是整合多个数据源的历史数据进行细粒度的、多维的分析,帮助高层管理者或者业务分析人员做出商业战略决策或商业报表。
这里面就涉及到了数据仓库的架构,简单来说数据仓库分为四个层次:
- ODS层:存放原始数据,直接加载原始日志、数据,数据保存原貌不做处理。
- DWD层:结构与粒度原始表保持一致,对ODS层数据进行清洗
- DWS层:以DWD为基础,进行轻度汇总
- ADS层:为各种统计报表提供数据
这里要注意数据仓库的架构当中,各个系统的元数据通过ETL同步到操作性数据仓库ODS中,对ODS数据进行面向主题域建模形成DW(数据仓库),DM是针对某一个业务领域建立模型,具体用户(决策层)查看DM生成的报表。
也就是说,我们所看到的数据不是直接从数据底层抽取的,相当于我们访问数据仓库的时候,是让图书管理员帮你找一个文件柜,那么怎么更高效低去找,就是数据仓库建设中很重要的一部分工作——数据建模,包括数据的存储模型、逻辑模型、概念模型等等。
二、数据仓库的建模方式
建设数据模型既然是整个数据仓库建设中一个非常重要的关键部分,那么,怎么建设我们的数据仓库模型就是我们需要解决的一个问题。这里我们将要详细介绍如何创建适合自己的数据模型。
(1)数据仓库数据模型架构
数据仓库的数据模型的架构和数据仓库的整体架构是紧密关联在一起的,我们首先来了解一下整个数据仓库的数据模型应该包含的几个部分。从下图我们可以很清楚地看到,整个数据模型的架构分成5 大部分,每个部分其实都有其独特的功能。
从上图我们可以看出,整个数据仓库的数据模型可以分为大概5 大部分:
- 系统记录域:这部分是主要的数据仓库业务数据存储区,数据模型在这里保证了数据的一致性。
- 内部管理域:这部分主要存储数据仓库用于内部管理的元数据,数据模型在这里能够帮助进行统一的元数据的管理。
- 汇总域:这部分数据来自于系统记录域的汇总,数据模型在这里保证了分析域的主题分析的性能,满足了部分的报表查询。
- 分析域:这部分数据模型主要用于各个业务部分的具体的主题业务分析。这部分数据模型可以单独存储在相应的数据集市中。
- 反馈域:可选项,这部分数据模型主要用于相应前端的反馈数据,数据仓库可以视业务的需要设置这一区域。
通过对整个数据仓库模型的数据区域的划分,我们可以了解到,一个好的数据模型,不仅仅是对业务进行抽象划分,而且对实现技术也进行具体的指导,它应该涵盖了从业务到实现技术的各个部分。
(2)数据仓库建模阶段划分
我们前面介绍了数据仓库模型的几个层次,下面我们讲一下,针对这几个层次的不同阶段的数据建模的工作的主要内容:
从上图我们可以清楚地看出,数据仓库的数据建模大致分为四个阶段:
- 业务建模,这部分建模工作,主要包含划分整个单位的业务等等
- 领域概念建模,这部分得建模工作,主要包含抽取关键业务概念,分组,细化分组概念,形成完整的领域概念模型
- 逻辑建模,这部分的建模工作,主要包含业务概念实体化,事件实体化,说明实体化
- 物理建模
从我们上面对数据仓库的数据建模阶段的各个阶段的划分,我们能够了解到整个数据仓库建模的主要工作和工作量,希望能够对我们在实际的项目建设能够有所帮助。
(3)数据仓库建模方法
- 范式建模法
范式建模法其实是我们在构建数据模型常用的一个方法,该方法的主要由Inmon 所提倡,主要解决关系型数据库得数据存储,利用的一种技术层面上的方法。目前,我们在关系型数据库中的建模方法,大部分采用的是三范式建模法。
范式建模法的最大优点就是从关系型数据库的角度出发,结合了业务系统的数据模型,能够比较方便的实现数据仓库的建模。但其缺点也是明显的,由于建模方法限定在关系型数据库之上,在某些时候反而限制了整个数据仓库模型的灵活性,性能等,特别是考虑到数据仓库的底层数据向数据集市的数据进行汇总时,需要进行一定的变通才能满足相应的需求。
- 维度建模法
维度建模法,Kimball 最先提出这一概念。其最简单的描述就是,按照事实表,维表来构建数据仓库,数据集市。这种方法的最被人广泛知晓的名字就是星型模式(Star-schema)。
上图的这个架构中是典型的星型架构。星型模式之所以广泛被使用,在于针对各个维作了大量的预处理,如按照维进行预先的统计、分类、排序等。通过这些预处理,能够极大的提升数据仓库的处理能力。特别是针对3NF 的建模方法,星型模式在性能上占据明显的优势
- 实体建模法
上图表述的是一个抽象的含义,如果我们描述一个简单的事实:“小明开车去学校上学”。以这个业务事实为例,我们可以把“小明”,“学校”看成是一个实体,“上学”描述的是一个业务过程,我们在这里可以抽象为一个具体“事件”,而“开车去”则可以看成是事件“上学”的一个说明。
由于实体建模法,能够很轻松的实现业务模型的划分,因此,在业务建模阶段和领域概念建模阶段,实体建模法有着广泛的应用。从笔者的经验来看,再没有现成的行业模型的情况下,我们可以采用实体建模的方法,和客户一起理清整个业务的模型,进行领域概念模型的划分,抽象出具体的业务概念,结合客户的使用特点,完全可以创建出一个符合自己需要的数据仓库模型来。
三、数据仓库的建设流程
1、模板调研:
信息调研是逻辑模型设计、物 理模型设计以及数据映射的基 础,在模型设计阶段贯穿始终决定了数据仓库的质量。
这一步我们主要的工作是找出实际存在的业务问题,领导的KPI问题,现在没有提出未来可能出现的问题,这是数据仓库建立的核心所在。方法就是调研,包括业务人员、领导方不断沟通,不断调研,输出问题清单。
2、主题域模型设计:主题域的界定、每个主题主实体的准入原 则、数据处理规范、核心的分类决定了数 据模型的主体框架,保持主体框架的稳定 性确保了仓库的稳定性。
3、概念模型设计:详细的实体属性的设计,大量数据分析业务规则验证的工作,模型设计的同时完成到逻辑 数据模型的简要数据映射
4、逻辑模型数据设计:提供与生产一致版本的数据结构,准 确完善的数据字典,符合分析需求的 样本数据;并能对样本数据分析中的 问题进行及时准确的回复跟踪
5、物理存储模型设计:协调仓库数据的相关方达成共 识,既包容当前数据满足现有 需求,又具备一定的前瞻性便 于扩展,还必须具备操作性
6、模型优化设计回顾:模型设计是多人协同的团队工作,是一项持续不断地扩展演化完善的 过程,遵循模型设计规范、沿用一致的模型客户化方式是至关重要的。
数据仓库作为企业提供决策支持而构建的集成化数据环境,本身并不产生或者消费数据,基本架构包含的是数据流入流出的过程,首先放上一张数据仓库的架构图。数据仓库作为中间集成化数据管理的一个平台,底层有多种数据来源,流入数据仓库之后对上层应用开放。
1、分析业务需求,确定数据仓库主题
数据模型的创建依赖数据仓库主题的确定,在搭建数据仓库之前,首先就是要充分了解业务部门的问题需求,明确我们所要创建的数据仓库真正可以解决的问题,在多次沟通的前提下,可以准确的确定系统能够实现的功能。在这个过程中,基于双方理解问题的不同,还需要我们对需求做出一些原型的演示,避免理解上的分歧。
需要做到包括:从业务方需求中提取出重要的业务数据主题,并对业务数据主题进行详细的解释;对提取出的业务数据主题进行主题域的划分,并对主题域进行详细的解释;根据主题域的划分,对内部的组织结构和业务关系细节化,构建出主题域的概念模型。
2、构建逻辑模型
在概念模型的基础上,对其进行进一步的细化和分解,通过实体和实体之间的关系描述业务的需求和系统实现的技术领域。逻辑模型的构建在数据仓库的实施中最为重要,是业务需求人员和技术人员进行沟通的桥梁和平台,能够直接反映业务部门实际的需求和对业务的规划,同时对下面物理模型的构建也具有指导意义。逻辑模型通过实体与实体之间的关系勾勒出了整个业务部门的数据蓝图和规划。
逻辑模型主要关注细节性的业务规则,同时也需要解决每个主题域包含的概念范畴和跨主题域的集成和共享问题,构建的步骤一般包括:分析需求,列出需要分析的主题,明确需求目标、维度指标、分析的指标、分析的方法、数据的来源以及需要关注的对象等;选择用户感兴趣的数据,通过业务需求将需要分析的指标分离抽取出来,转换为实体;在实体中增加时间戳属性;考虑粒度层次的划分,粒度决定了数据仓库的实现方式、性能、灵活性以及数据仓库的数据量;在粒度层次划分的基础上,进行关系模式的定义,关系模式一般采取第三范式的特点进行定义;同时在逻辑模型的基础上对实体的属性、属性的值域等信息进行明确、完善和细化,保证真实的反映业务的逻辑关系和业务的规则。
3、逻辑模型转换为物理模型
基于逻辑模型,接下来就是为应用环境选择一个合适的物理结构,包括合适的存储结构以及合适的存储方法。将逻辑模型转换为物理模型主要包括:实体名转换为表名;属性名转换为列名,并且确定列的属性;在物理模型的创建过程中,必须要对列的属性进行明确,包括列名、数据类型、是否是空值以及长度等。确定物理模型之后,对于数据的存放位置和存储空间的分配等也需要进行规划。
4、数据源接入
在数据仓库的建立之前,需采集底层多种数据源数据,明确数据源中的数据种类,采用合适的工具。比如,Flume NG作为实时日志收集系统,支持在日志系统中定制各类数据发送方,用于收集数据,同时,对数据进行简单处理,并写到各种数据接收方;NDC,Netease Data Canal,直译为网易数据运河系统,可以实现结构化数据库的数据实时迁移;Sqoop可以将关系型数据库中的数据导入到平台中;Logstash作为开源的服务端数据处理管道,也可以轻松的将日志、WEB应用等数据采集到平台中。
5、数据存储清洗和转换
对数据进行清洗和转换,保证进入到数据仓库中的数据的一致性。结合业务需求,采用合适的数据清洗转换工具。
6、对接BI,数据展示
为业务部门选择合适的工具实现对数据仓库中的数据进行分析的目的,正确清晰的展现用户的功能需求。
数据仓库搭建成功之后,还需对其安全性、备份恢复等方面进行管理。
1.系统分析,确定主题
建立数据仓库的第一个步骤就是通过与业务部门的充分交流,了解建立数据仓库所要解决的问题的真正含义,确定各个主题下的查询分析要求。
业务人员往往会罗列出很多想解决的问题,信息部门的人员应该对这些问题进行分类汇总,确定数据仓库所实现的业务功能。一旦确定问题以后,信息部门的人员还需要确定一下几个因素:
·操作出现的频率,即业务部门每隔多长时间做一次查询分析。
·在系统中需要保存多久的数据,是一年、两年还是五年、十年。
·用户查询数据的主要方式,如在时间维度上是按照自然年,还是财政年。
·用户所能接受的响应时间是多长、是几秒钟,还是几小时。
由于双方在理解上的差异,确定问题和了解问题可能是一个需要多次往复的过程,信息部门的人员可能需要做一些原型演示给业务部门的人员看,以最终确定系统将要实现的功能确实是业务部门所需要的。
2.选择满足数据仓库系统要求的软件平台
在数据仓库所要解决的问题确定后,第二个步骤就是选择合适的软件平台,包括数据库、建模工具、分析工具等。这里有许多因素要考虑,如系统对数据量、响应时间、分析功能的要求等,以下是一些公认的选择标准:
·厂商的背景和支持能力,能否提供全方位的技术支持和咨询服务。
·数据库对大数据量(TB级)的支持能力。
·数据库是否支持并行操作。
·能否提供数据仓库的建模工具,是否支持对元数据的管理。
·能否提供支持大数据量的数据加载、转换、传输工具(ETT)。
·能否提供完整的决策支持工具集,满足数据仓库中各类用户的需要。
3.建立数据仓库的逻辑模型
具体步骤如下:
(1)确定建立数据仓库逻辑模型的基本方法。
(2)基于主题视图,把主题视图中的数据定义转到逻辑数据模型中。
(3)识别主题之间的关系。
(4)分解多对多的关系。
(5)用范式理论检验逻辑数据模型。
(6)由用户审核逻辑数据模型。
4.逻辑数据模型转化为数据仓库数据模型
具体步骤如下:
(1)删除非战略性数据:数据仓库模型中不需要包含逻辑数据模型中的全部数据项,某些用于操作处理的数据项要删除。
(2)增加时间主键:数据仓库中的数据一定是时间的快照,因此必须增加时间主键。
(3)增加派生数据:对于用户经常需要分析的数据,或者为了提高性能,可以增加派生数据。
(4)加入不同级别粒度的汇总数据:数据粒度代表数据细化程度,粒度越大,数据的汇总程度越高。粒度是数据仓库设计的一个重要因素,它直接影响到驻留在数据仓库中的数据量和可以执行的查询类型。显然,粒度级别越低,则支持的查询越多;反之,能支持的查询就有限。
对数据操作的效率与能得到数据的详细程度是一对矛盾,通常,人们希望建成的系统既有较高的效率,又能得到所需的详细资料。实施数据仓库的一个重要原则就是不要试图包括所有详细数据,因为90%的分析需求是在汇总数据上进行的。试图将粒度细化到最低层,只会增加系统的开销,降低系统的性能。5.数据仓库数据模型优化
数据仓库设计时,性能是一项主要考虑因素。在数据仓库建成后,也需要经常对其性能进行监控,并随着需求和数据量的变更进行调整。
优化数据仓库设计的主要方法是:
·合并不同的数据表。
·通过增加汇总表避免数据的动态汇总。
·通过冗余字段减少表连接的数量,不要超过3~5个。
·用ID代码而不是描述信息作为键值。
·对数据表做分区。
6.数据清洗转换和传输
由于业务系统所使用的软硬件平台不同,编码方法不同,业务系统中的数据在加载到数据仓库之前,必须进行数据的清洗和转换,保证数据仓库中数据的一致性。
在设计数据仓库的数据加载方案时,必须考虑以下几项要求:
·加载方案必须能够支持访问不同的数据库和文件系统。
·数据的清洗、转换和传输必须满足时间要求,能够在规定的时间范围内完成。
·支持各种转换方法,各种转换方法可以构成一个工作流。
·支持增量加载,只把自上一次加载以来变化的数据加载到数据仓库。
7.开发数据仓库的分析应用
建立数据仓库的最终目的是为业务部门提供决策支持能力,必须为业务部门选择合适的工具实现其对数据仓库中的数据进行分析的要求。
信息部门所选择的开发工具必须能够:
·满足用户的全部分析功能要求。数据仓库中的用户包括了企业中各个业务部门,他们的业务不同,要求的分析功能也不同。如有的用户只是简单的分析报表,有些用户则要求做预测和趋势分析。
·提供灵活的表现方式。分析的结果必须能够以直观、灵活的方式表现,支持复杂的图表。使用方式上,可以是客户机/服务器方式,也可以是浏览器方式。
事实上,没有一种工具能够满足数据仓库的全部分析功能需求,一个完整的数据仓库系统的功能可能是由多种工具来实现,因此必须考虑多个工具之间的接口和集成性问题,对于用户来说,希望看到的是一致的界面。
8.数据仓库的管理
只重视数据仓库的建立,而忽视数据仓库的管理必然导致数据仓库项目的失败。数据仓库管理主要包括数据库管理和元数据管理。
数据库管理需要考以下几个方面:
·安全性管理。数据仓库中的用户只能访问到他的授权范围内的数据,数据在传输过程中的加密策略。
·数据仓库的备份和恢复。数据仓库的大小和备份的频率直接影响到备份策略。
·如何保证数据仓库系统的可用性,硬件还是软件方法。
·数据老化。设计数据仓库中数据的存放时间周期和对过期数据的老化方法,如历史数据只保存汇总数据,当年数据保存详细记录。
然而,元数据管理贯穿于整个系统的建设过程中,元数据是描述数据的数据。在数据采集阶段,元数据主要包括下列信息:
·源数据的描述定义:类型、位置、结构。
·数据转换规则:编码规则、行业标准。
·目标数据仓库的模型描述:星型/雪花模型定义,维/事实结构定义。
·源数据到目标数据仓库的映射关系:函数/表达式定义。
·代码:生成转换程序、自动加载程序等。
在数据管理阶段,元数据主要包括下列信息:
·汇总数据的描述:汇总/聚合层次、物化视图结构定义。
·历史数据存储规则:位置、存储粒度。
·多维数据结构描述:立方体定义、维结构、度量值、钻取层次定义等。
在数据展现阶段,元数据主要包括以下信息:
·报表的描述:报表结构的定义。
·统计函数的描述:各类统计分析函数的定义。
·结果输出的描述:图、表输出的定义。
元数据不但是独立存放,而且对用户是透明的,标准元数据之间可以互相转换。
如何建设数据仓库?
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/167274.html