1、5.2.2 数据仓库概念设计数据仓库中的数据模型是数据的多维视图,其设计直接影响后期的联机分析的处理查询引擎30。现在数据仓库常用的设计方法是利用维度建模来帮助分析,其关键是确定事实表、维、粒度及数据仓库模式的选择。常使用的多维数据模型有星型模型、星网模型、雪花模型等。本项目将采用星型模型,其主要优点如下:1. 星型模型增加了数据的可见性更利于关系型数据模型的存储;2. 使用星型模型使事实表和维之间的关系更加清晰,由于在该结构中将对维的描述和其级别存储在维表中,因而在事实表中将会使用较小的维表与键的连接,减小了存储空间;3. 使用星型构架相对更方便进行维护4. 将维和事实表分离能够保证所有成员
2、在不同级别的存在,即便事实表中没有该成员的信息。本章中将煤矿历史数据表作为事实表,将其中的环境参数监测值作为度量值建立时间、地点、类型三个维度。接着将进行粒度的划分,粒度是数据仓库中数据单位元的详细程度和级别,在时间维上将其分为年、月、日三个级别,日级别设立时、分、秒三个成员属性。5.2.3 ETL的设计与实现本项目的数据仓库中数据来源于数据库的表以及少量经过中间件简单处理后直接上传的据等异构信息源,因此这些数据无论在数据格式还是在数据质量上都有较大差异,个别数据在形式上不容易被用户理解,数据在被功能模块调用后返回过程中也会产生新的冗余,将这部分数据直接导入已定义好数据结构和加载规则的数据仓库
3、中是不可取的。因此在将数据导入前首先要对数据进行ETL即抽取、转换、加载(Extract-Transform-Load)处理,在本项目中将借助SQL Server Integration Server 的服务帮助来完成ETL过程。1. ETL的开发策略首先将进行ETL预处理为正式工作做好准备,其过程包括将工作区清空、扫描准备区。由于在后期需要直接从数据库中提取数据,因此要首先确保数据库服务器处于正常状态并对目标区数据加载状态进行核对,如加载数据满足要求则启动数据加载的批作业。接着依次进行维度表及事实表的加载,在加载过程中需注意处理缓慢维度以及可能涉及的版号处理问题,在加载完成后对多物化视图进行
4、刷新,确保物化视图与数据库最新数据保持一致,其具体过程如图5.2所示。图5.2 ETL开发流程图2. ETL 包的实现本项目将利用Integration Services(SSIS)来帮助完成ETL工作。SSIS与微软之前的数据迁移工具DTS即数据转换服务(Data Transformation Service)相比,在数据整合等性能方面有了很大程度的提高,能够支持来自异构数据源的复杂数据流程设计以及WEB Services、XML即可扩展标记语言(Extensible Markup Language)、动态调试等技术,满足项目要求。首先需要将执行记录插入到AuditPkgExecution表
5、同时清空事实表,然后分别加载维度及事实表。在完成上述过程后刷新 AuditPkgExecution 表,记录包的执行状态和执行结束时间。当运行到 Load Dimensions包处时,将对各个维度按顺序进行加载。各维度都具有一系列数据流,来处理像空值、数据错误、数据不一致等一系列有关数据字段的问题,接着对涉及历史数据的维度进行处理。在整个维度加载过程完成以后也需要记录包的执行状态及完成时间。维度加载结束以后便开始事实表的加载,这个主要过程包括2个数据流,分别是将数据加载到操作数据存储的Extract FactOrders 数据流,FactOrders从Extract FactOrders 中抽
6、取数据并实现对表的键值查询、空置处理以及简单小计。5.3 数据立方体的构建与多维分析5.3.1 多维立方体的构建与优化本项目中将建立常规立方体,首先依照所选的星型模型确定各个立方体的事实表、度量值及维度,然后借助Analysis Manager立方体向导功能进行构建,主要步骤如下:1.选择“Build the cube using a datasource”,并选中“Auto Build”;2.在完成对数据视图的定义后,使用立方体向导自动对事实表及维度表进行检测;3.制定事实表和维表,将历史环境监测值定为事实表,地点、时间、类型定为维表;4.检查维度属性,删除多余的备注、图片字段;5.完成An
7、alysis Services项目的部署工作:通过“开始Microsoft SQL Server 2008R2 CTPConfiguration ToolsSQL Server Surface Area Configuration”启动Analysis Services服务,服务的名称为MSSQLServerOLAPService。在“解决方案浏览器”中单击Analysis Services项目选择“部署”。在立方体构建完成后,将利用立方体编辑器中的向导对Anlysis Services进行优化。从用户查询效率以及后期维护等多面考虑本文的数据存储模式将选取MOLAP即多维联机分析处理(Mult
8、idimensionalOLAP),其优势在于在查询方面MOLAP需要预先定义概要文件,同时采用索引搜索与直接寻址的方式相结合的查询方式即在汇总查询前对概要文件数据以批处理方式汇总计算大大缩短了查询等待时间。在分析能力方面,由于预先定义了概要文件,其中详细说明了维度之间的层次关系,从而建立起检错机制大大提高了查询精度。同时MOLAP在后期管理时,只需用SQL语句输入数据即可,而无需打开或者关闭索引,因此和ROLAP即关系联机分析处理(RelationalOLAP)相比具有优势。5.3.2 多维分析接下来将利用联机分析处理来对目标立方体进行分析与描述,其主要包括对数集的切片、切块、旋转、钻取等行
9、为,具体描述如下:1. 多维切片和切块:切片操作就是在数据立方体中首先选取一个维j,在固定j维上固定取值,而在剩下的两个维上随意取值,就得到了在这两个维上的一个切片。以煤矿历史环境监测立方体为例,图5.3是一个由时间维、地点维、类型维构成的历史环境监测数据立方体,固定时间维的取值为“2014年12月3日17点整”就得到了一个在地点维和类型维上的切片,而切块则是多个切片在某一维上的聚集。2. 钻取:钻取分为上钻与下钻,上钻是对明细数据的概括,得到更高一级的数据视图,与之相反如果想查看更详细的内容则需要进行下钻操作,例如在一个月内某一分站的累积报警过多,则可以通过下钻操作查看分站内具体区域的情况。
10、3. 旋转:通过交换维的放置来得到查询数据的不同视角。图5.3 煤矿历史环境监测数据立方体5.3.3 OLAP数据的更新处理数据仓库中的数据并不是一直不变的,每隔一段时间都会从数据库中抽取数据同时删除过期的部分,为了使数据保持一致需要对OLAP进行更新,主要涉及维和立方体的更新处理。1. 维的更新处理在查询前先要先对维数据进行处理,对维的更新主要是采取增量更新的方式,当涉及到维的改变时需要通过增加、删除、移动等操作来对维成员进行更新,待以上处理结束后需要对涉及到相应维的立方体进行刷新操作。当维的结构或者是维名发生改变时就需要对维进行重建并重新处理维的所有数据,并且同时对相应的数据立方体进行重新
11、处理。2. 立方体的更新处理立方体的更新处理与维更新基本一致,只是在增量更新增加了一个过滤条件。增加该条件是为了避免更新时使整个事实表发生改变,同时因增加已有聚集而造成数据的重复27。本项目中使用增量更新目的是在不用计算原聚合的情况下始终保持立方体中数据最新。而在需要将已有数据加载到立方且不改变其结构(特别是在处理小立方且不确定增加哪些数据)的情况下使用刷新数据操作即先将立方数据全部清除后再用原有的数据对其进行填充,以此来更新立方并重新计算聚合,在刷新数据的过程中仍然可以对数据进行查询操作31。本项目中还会用到完全处理,即在遇到OLAP的结构发生了更改的情况下完成从底部构架到数据装入的整个过程
12、,在过程完成后需要重新连接立方。在整个处理过程中系统仍然支持对立方体的查询操作。5.4 数据挖掘功能的分析与实现本小节将在数据仓库的基础上,利用数据挖掘技术帮助分析挖掘数据中所包含的潜在信息。常用的数据挖掘技术有聚类、分类、关联、预测等,这里将主要对关联算法在项目中的运用进行阐述。5.4.1 关联规则的定义与分析关联规则是寻找数据的关联性,联系有价值的数据项,发现潜在的知识。在关联算法中事务数据库记为D,每条记录中的各条款为项目,挖掘的主要对象是项目集形如XY的规则32;支持度:支持度为项集中同时包含X和Y的项集数与事务集的比值记为support(XY),支持度是用来衡量关联规则的重要程度;置
13、信度:为同时包含若X,Y为项目集数与包含X的项集数的比值记为confidence(X Y),置信度被用来衡量关联规则的可信度,用minconf 来表示最小置信度33。频繁项集:当项目集X的支持度不小于最小支持度minsup,则称其为频繁项集,简称频集。强规则定义为:若support(XY)minsup,confidence(XY)minconf,则称关联规则XY为强规则,否则为弱规则。其算法步骤描述如下:1. 找出存在于事物数据库中的所有大项目集:先计算候选 1项集(k项集是含有k个项目的集合),找出频繁1项集;根据频繁1项集,确定候选2项集,找出频繁2项集,依次类推,直到不再有候选项集为止3
14、4。最后得到的项集就是所求的大项集。2. 用大项集按生成规则和置信度产生所需要的强规则。5.4.2 经典Apriori算法分析Apriori算法是一种最有影响的挖掘关联规则的算法,该算法使用了迭代性质,首先找到频繁1-项集,表示为L1。然后用L1来生成L2,项集又用来生成L3,这样直到无法找到更多的频繁项目集为止Apriori算法还使用了频繁项目集的性质,即在给定的事务集D中,任意频繁项目集的子集都是频繁项目集。在判断Ck中的项目集是否属于Lk前,先利用该性质对Ck进行修剪。其流程图如图5.4所示。图5.4 Apriori算法流程图具体算法如下:输入:数据集D、最小支持度minsupport输出:所有的频繁项目集L1=find_Frequen_1_itemsets(D,minsup):for(k=2;Lk-1=;k+)Ck=appriori_gen(Lk-1);for每个事务tD doC1=
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1