代冬升 王跃利
(1.军事科学院 联合作战研究实验中心,北京100091;2.军械工程学院,河北 石家庄050000)
由于作战实验的阶段性发展和分布性特点,导致大量分布、异构、自治作战实验数据源的出现[1,2],这些数量巨大、内容丰富的数据资源难以有效集成整合,无法为作战实验提供及时、有效的数据支持,因此,必须采取有效方式将众多作战实验“信息孤岛”集成整合为一个有机整体。数据仓库是一个面向主题、集成、非易失、随时间变化、用来支持管理人员决策的数据集合,它为作战实验数据集成提供了技术途径。本文针对数据仓库构建过程中的ETL 方法开展研究,以提高多源异构作战实验数据抽取、转换和加载的质量和效率[3]。
ETL 主要是指数据的抽取(Extracting)、转换(Transforming)和加载(Loading)的过程,是将数据从业务信息系统转入数据仓库的一系列操作的集合。ETL 基本过程如图1 所示,首先将数据源中的数据抽取到数据集中,然后对数据集中的数据进行转换处理并转入数据缓冲区,最后将数据从数据缓冲区加载到数据仓库中。ETL 是确保数据规范性、完整性、一致性,提高数据仓库数据质量的关键环节,也是数据仓库建设过程中最为费时费力的部分。
本文在研究分析与实践应用的基础上,提出了一种改进的ETL 方法:E - IT - T - L(Extracting,Integrality Test,Transforming & Loading),在ETL 过程中增加了完整性验证工作。传统ETL 方法的绝大部分工作和压力集中在数据转换过程,效率受到很大影响。在ETL 过程中引入数据完整性检测,目的是及早发现业务数据中存在的问题,尽量靠近根源处解决数据质量隐患,提高数据转换、清洗速度,进一步提高数据质量。
数据完整性是指在数据库中存储的数据的一致性、正确性和合理性,体现了数据对客观世界描述的完整程度。目前,作战实验相关信息系统基本上都采用关系型数据库进行数据组织和管理,数据之间的逻辑关系、约束关系较为复杂,而且数据中存在数据重复、数据不全、逻辑关联的数据项值不一致、数据输入错误等现象。一方面,这种情况对数据质量造成了严重影响,数据的可用性、可信性大大降低;另一方面,数据质量问题给作战实验数据仓库ETL 工作带来了巨大挑战,增加了工作难度,同时也为在此基础上的数据挖掘分析埋下了隐患。
作战实验数据仓库E-IT-T-L 设计,力求通过对业务信息系统数据完整性进行检测,进一步理清业务数据之间的逻辑关系,准确定位单个业务信息系统级别的数据在一致性、正确性和有效性方面存在的问题,为数据修正完善提供依据,有效节省数据仓库ETL 中的数据转换过程的时间和精力,进一步强化和提高数据质量。
作战实验数据仓库E -IT -T -L 结构框架主要包括数据源、E-IT-T-L 和数据仓库三个层次,如图2 所示,通过对数据处理工作的多次分解来降低整体工作的复杂程度。
表1 E-IT-T-L 基本操作
数据源层包括面向事务性操作的业务数据和支撑业务活动的基础数据两类,业务数据包括武器装备数据、体制编制数据、作战目标数据和仿真模拟数据等,基础数据包括各种标准代码、数据元素标准和业务标准等。
E-IT-T-L 层是整体框架的核心,主要包括数据抽取、数据完整性检测、数据转换、数据加载四个数据操作步骤。首先,通过数据抽取实现与数据源建立连接,并从数据源抽取数据到原样库中,原样库包含了与数据源完全一致的数据环境和数据记录;其次,通过数据完整性检测对原样库中的数据进行完整性检测,未通过检测的数据需要进行修正、补充或清除,检测通过后再进行数据转换、规范化、清洗等处理进入用户事务库,再由用户事务库提取业务实体信息进入业务实体库,标准代码库用于存储统一的分类代码和标识代码,维度定义库用于存储全局统一的维度数据;第三,根据数据仓库的数据结构,以业务实体为数据组织核心,将业务实体库中的数据加载到数据仓库中。在E -IT -T-L 层,需要使用数据源元数据、数据映射元数据、数据加载元数据和数据仓库元数据等进行配合,确保相关操作顺利完成。
数据仓库层按业务主题进行数据存储与管理,每个主题下包括多个事实表和维度表,为上层的OLAP 多维数据分析和数据挖掘提供数据支撑。
E-IT -T -L 需要经过多种数据变换操作才能完成将多源异构数据转变为符合要求的数据,并存储到数据仓库中。本文结合实际需要对E -IT-T -L 过程涉及的基本操作进行了分析与设计,见表1。在实际E-IT-T-L 操作时,需要有选择地进行使用。
作战实验数据抽取是从各类数据源抽取数据集合,并存储到原样库的过程。如果数据源相关文档保留完整、数据结构清晰、数据定义规范,数据抽取过程就会相对简单。但如果是历史遗留系统,其数据定义不规范、数据值不一致等问题较为突出,就需要在抽取过程中明确数据定义,并对数据进行有条件的筛选。
作战实验数据抽取的模式包括静态抽取和增量抽取,如图3 所示。静态抽取通过无一遗漏扫描作战实验数据源中全部业务数据的方式进行数据抽取,是业务数据的全量抽取。静态抽取比较消耗时间,适用于数据库初始化阶段一次性抽取业务信息系统中的所有数据。增量抽取通过定期从作战实验数据源中抽取上次抽取以后发生改动的业务数据的方式进行数据抽取,适用于定期更新作战实验数据仓库中的数据。按照抽取主体的不同,增量抽取可分为主动增量抽取和被动增量抽取。
4.2.1 数据完整性检测主要内容
作战实验数据完整性检测主要是依据数据库第三范式、用户自定义约束和业务原则,进行数据完整性检测。经过分析研究认为,主要包括候选键完整性、主从关系完整性、引用关系完整性、计算关系完整性、约束关系完整性、枚举值域完整性的检测,具体描述如下:
(1)候选键完整性检测。候选键是可以唯一确定关系数据表中的一行数据但没有被选择作为主键的属性集合。候选键完整性检测即是检测关系数据表中的候选键是否满足唯一性,即不为空和不可重复。
(2)主从关系完整性检测。主从关系完整性检测是指对存在主从关系的关系数据表间的主从关系进行检测,检查从表外键的值与主表主键(或候选键)的值是否保持一致。
(3)引用关系完整性检测。引用关系完整性检测是针对关系数据表中存在引用关系的数据项进行检测,检查引用后的数值是否与原值保持一致。
(4)计算关系完整性检测。计算关系完整性检测是依据数据表数据项间存在的计算关系对其数据值进行检测,检测数据值是否满足对应的计算关系。
(5)约束关系完整性检测。约束关系完整性检测是指对关系数据表数据项间存在的约束关系进行检测,检查其数值是否符合对应的约束关系。
(6)枚举值域完整性检测。枚举值域完整性检测是指对关系数据表中取值为枚举值的数据项进行检测,检查其数据值是否超出枚举值域范围。
4.2.2 数据完整性检测过程
数据完整性检测的过程如图4 所示。首先,要建立支持上述六种完整性检测的规则和枚举值域字典表,然后将原样库中的数据提取到镜像库中,并根据建立的规则进行数据完整性检测,对发现的问题记录存储到问题记录库中等待进一步处理,并将相关信息写到日志中。
根据网络具体情况,数据完整性检测可分为在线检测和离线检测:在线检测可实时进行检测并预警;离线检测可对数据库批量数据进行检测,并对错误数据进行分析和提示。
4.3.1 数据转换主要内容
数据转换涉及一系列复杂的数据操作来确保数据质量,是决定作战实验数据仓库建设成败的关键,下面分别对其涉及的合并、拆分、连接、过滤、清除、变换、统一代码和计算等操作进行说明。
(1)合并。该操作是将在数据源中分散存储的数据合并到一起,例如,有的系统将作战目标地理坐标分为经度(X)和纬度(Y)两个字段,合并操作就是将这两个字段的值合并到一起,统一为“地理坐标”(X,Y)字段的值。
(2)拆分。该操作与合并相反,是将在数据源中存储在一起的数据分离开来。
(3)连接。该操作主要是通过公共属性建立数据间的连接关系,例如,通过“编制代码”来关联兵力部署库中的兵力单元信息和体制编制库中的体制编制基本信息。
(4)过滤。该操作是将数据中不满足需要的数据过滤掉,例如,A 装备已经退出现役,不需要将A 装备数据导入数据仓库中,则可通过该操作将A装备数据过滤掉。
(5)清除。该操作是将数据中错误的或无效的数据清除掉,假设某条记录中A 型火炮一小时的射弹数为2000 发,射弹数明显不合理,因此需要将该条记录予以清除。
(6)变换。该操作通常包括数据类型变换、度量变换和格式变换等,例如,如果数据仓库存储在Oracle 数据库中,则需将SQL Server 中的int、bigint、tinyint 等类型统一变换为Oracle 数据库中的number 类型。
(7)统一代码。该操作是将对象标识代码进行统一,例如,作战目标信息表中通过目标代码标识每个作战目标,而该标识代码需要与我军作战部门的目标代码相一致。
(8)计算。该操作是通过对已有数据进行计算来生成新的数据,例如,在装备保障方案评估中,将装备完好率作为一个评价指标,其计算公式如下:
4.3.2 数据转换过程
作战实验数据转换过程涉及大量的数据,过程中很大一部分工作是进行数据验证,发现数据中存在的问题,然后有针对性的进行处理。因此,数据转换首先建立数据检测要求,明确哪些数据应该被检测出来;然后,设置转换的规则,即对发现的问题数据采取什么措施进行处理;最后,将生成的“干净”数据进行存储管理。
不同的应用背景有不同的数据转换需求,针对作战实验数据的特点以及存在的问题,其数据转换主要完成合并、拆分、连接、变换、统一代码等转换操作,最终生成统一的模型、语义和一致的数据。作战实验数据转换规则保存在融合库中由E -IT-T - L 软件调用。系统首先取出指定的转换规则,再由规则解析模块进行解析并加入到转换队列,抽取的数据经过队列中的每一个规则进行清洗转换,最后输出干净的数据集。
4.4.1 数据加载主要内容
数据经过转换处理变为干净数据后,即可将其加载到数据仓库中。数据加载过程涉及维度表和事实表的数据加载更新。数据的加载与数据抽取阶段的模式直接相关,通常在第一次执行时使用静态加载,之后的加载使用增量加载。
在作战实验数据加载过程中,首先需要加载维度表,以满足维度表主键与事实表对应外键之间的引用完整性约束关系。维度表加载完毕后,开始事实表的加载。由于事实表加载的数据量通常比较大,每次加载过程中需要充分考虑容量负荷问题,并使用并行加载来提高工作效率。需要注意的是,不论是否有新的操作型数据需要加载到事实表,每次维度表发生变化,都必须对事实表中相应字段进行更新,保证维度表主键与事实表外键之间的引用完整性关系。
4.4.2 数据加载过程
作战实验数据融合库与数据仓库都存储在Oracle 数据库中,通过存储过程把数据从融合库提取出来并加载到数据仓库能够实现简单部署、快速加载。将数据融合库中的数据加载到数据仓库中,需要建立融合库数据表与数据仓库目标表间的映射关系,明确数据抽取方式和抽取规则,并通过相应的存储过程来实现。
本文在对传统数据仓库ETL 分析的基础上,针对作战实验数据的特点和数据仓库建设需求,提出了作战实验数据仓库E-IT-T-L 框架,并对数据的抽取、完整性检测、转换、加载过程进行详细设计。通过引入数据完整性检测,能够及早地发现业务信息系统数据中存在的质量问题,并就候选键的唯一性、数据的一致性、数据值的有效性等进行及时处理,减轻后续数据转换的工作压力,有效提高数据质量。该E-IT-T -L 方法在作战实验数据仓库构建研究过程中进行了应用,取得了良好效果。
[1] 王跃利,丁峰,周璐.作战实验信息支持系统工程实践与思考[J].军事运筹与系统工程,2008,22(3):12 -16.
[2] 战晓苏.作战实验工程的基本概念与体系构成研究[J].军事运筹与系统工程,2012,26(2):12 -15.
[3] WILLIAM H INMON. 数据仓库[M]. 第四版. 范明,孟小峰,译.北京:机械工业出版社,2006.
[4] MATTEO GOLFARELLI,STEFANO RIZZI. 数据仓库设计:现代原理与方法[M]. 战晓苏,吴云浩,皮人杰,译. 北京:清华大学出版社,2010.
[5] 宋杰.面向多类型数据源的数据仓库构建及ETL 关键技术的研究[D].沈阳:东北大学,2008.
[6] 宋旭东.企业集团数据仓库系统关键技术研究[D]. 大连:大连理工大学,2010.
[7] 孙剑.海洋环境数据仓库与数据挖掘应用研究[D]. 青岛:中国海洋大学,2011.
[8] 朱传华. 三峡库区地质灾害数据仓库与数据挖掘应用研究[D].北京:中国地质大学,2010.
[9] 吴东明,王丽娟.数据完整性约束的实现[J].四川兵工学报,2008(6):125 -127.
[10] 王虹.数据库系统中的数据完整性[J].数据库与信息管理,2011(7):3770 -3771.