APP下载

一种基于Kettle的无损增量数据同步方法研究

2019-12-04赵亚伟

软件导刊 2019年10期
关键词:教育大数据数据采集

赵亚伟

摘要:在学校各系统运行管理过程中,产生了大量宝贵的数据资源,这些数据对学校重要决策制定及传统教育模式改革有着极其重要的作用。因此,如何将不同维度的数据采集到统一的数据中心便成为大数据研究的重点之一。在数据采集过程中,很多学校没有保存重要的历史数据以及已删除记录的状态标记,将对数据分析中诸如时间切片分析、历史状态分析等产生致命影响。以学校人事系统为例,提出一种基于Kettle的无损增量数据同步方法。该方法利用全量数据比对方式,找出新增、修改和删除的数据,并对其进行详细记录,从而实现了对历史数据的完整保留,弥补了如时间切片分析等数据分析策略中数据不足的缺陷。

关键词:数据采集;增量同步;Kettle;教育大数据

DOI:10.11907/rjdk.191530开放科学(资源服务)标识码(OSID):

中图分类号:TP301文献标识码:A 文章编号:1672-7800(2019)010-0055-04

0引言

近年来,大数据为人们带来的价值逐渐被各国认识并重视。随着美国联邦部门发布《大数据研究与发展计划》,英国出台《把握数据带来的机遇:英国数据能力战略》,法国颁布《数字化路线图》等,大数据发展进入一个崭新阶段。在教育领域,国际著名期刊《Nature》和《Sci-enee》分别于2008和2011年推出大数据专刊,美国教育部于2012年10月发布《通过教育数据挖掘和学习分析促进教与学》报告,中国计算机学会于2012年举办了“大数据时代,智谋未来”报告会。由此可见,数据在未来生活中有着举足轻重的地位。

信息化建设的迅速推进使高校业务系统发生了巨大变革,将许多高校工作者从繁重的重复劳动中解放出来。然而,在学校各系统运行过程中,也产生了很多问题,例如:各系统间相对独立、编码标准不统一、数据分散、信息重复、信息冲突等。在“数据即资源”的大数据时代,这些问题显得尤为突出。要解决这些问题并实现数据分析的目标,首先需要建立一个标准统一、信息相对正确的数据中心,而数据中心的建设离不开数据采集。一般而言,数据采集分为数据库采集、日志采集与网络采集等方式,由于高校大部分业务系统采用关系型数据库存储数据,所以本文主要针对数据库采集方式进行研究。

数据库采集一般都是通过创建定时任务实现的,即在某个特定时间或周期内将变化的数据同步到数据中心。然而在目前主流的数据采集工程中,很少有学校注意到历史数据保存情况,也即是说,数据中心保存的只是新增与变化后的数据,对于变化前的数据以及删除的历史数据却缺乏相应的保存记录,从而导致在数据分析过程中存在数据缺失的情况,进而影响到分析结果的准确性。本文提出一种基于Kettle的无损增量数据同步方法,填补了数据中心重要历史数据缺失的空白,对于数据中心的建设可起到重要作用。

1工具介绍

数据采集中使用的主流技术是ETL技术,其是Extract(抽取)、Transform(转换)、Load(加载)首字母的缩写组合,也是数据采集入库的基本过程。它是指将异构数据源中的数据经过数据抽取以获取有价值的信息,进而按照一定规则对数据进行清洗,最后装入数据中心的过程。其中,数据源的数据形式包括各种结构化数据及非结构化数据。

目前ETL技术中比较流行的工具有:Oracle Ware-house Builder(简称OWB)、Oracle Data Integrator(简称ODI)、Informatica、Datastage、Kettle等。

其中,OWB主要用于Oracle数据库中数据的ETL、数据审计等场合,但其只能用在基于Oracle的数据库系统中,而不能完成异构数据库的数据集成工作。ODI的前身是Sunopsis Active Integration Platform,Oracle收購Sunopsis后改名为ODI。ODI可以完成几乎所有种类RDBMS数据库的数据集成工作,同时使用ODBC技术,也可以完成对文本、Excel文件、音视频文件等非结构化数据的集成工作。

Informatica和Datastage都是商业化ETL工具软件,价格较高,可提供很好的售后技术支持,Informatica需要进行客户端与服务器部署,Datastage的部署则比较复杂。两者都有着图形化的操作界面和监控界面,便于进行调试与优化。由于是商业软件,Informatica和Datastage基本无法自行扩展。

Kettle是一款免费、开源的ETL工具,基于Java语言开发,有着大量用户基础,可以跨平台使用以及进行项目移植。Kettle提供图形化的操作界面进行异构数据库以及非结构化数据的集成工作,并采用并行、集群等方式高效率地完成数据传输任务。

Kettle主要使用两种脚本文件实现数据集成:Trans-form(转换)和Job(作业)。其中,转换主要完成数据库中字段选择、数据清洗、数据入库等精细化工作,作业主要实现工作流控制及工作任务调度等。Transform和Job工程文件可以资源库(数据库)形式和文件(.ktr和.kjb)形式存储。Kettle概念模型如图1所示。

2数据同步方式

数据同步方式总体分为全量同步与增量同步。

2.1全量同步方式

全量同步是指在某个时间点或时间周期内将所有数据拷贝到目标数据库的过程,一般有以下两种方法:①先清空目标数据库,然后将全量数据拷贝过去;②先判断新的全量数据与目标数据库中数据是否一致,如果不一致,则清空目标数据库,将全量数据拷贝过去,如果一致,则不进行任何操作。该同步方式适用于第一次数据同步时(即目标数据库为空),数据量不大且实时性要求较低,或数据库中不存在主键的场景。

2.2增量同步方式

增量同步是指在某个时间点或时间周期内将变化的数据插入或更新到目标数据库的过程。在增量同步方式中,如何判断增量数据便成为影响数据同步效率的关键问题。一般而言,可采用以下4种方法进行判断:

(1)触发器:在源数据库表中建立触发器用来捕获变化的数据,将其放在临时数据表中。同步任务执行时,将临时表中的数据更新到目标数据库中。但该方式严重依赖于源数据库,且需要对源数据库的结构进行操作,一定程度上会影响业务系统运行。由于高校业务系统厂商的复杂性,该数据同步方式一般使用较少。

(2)日志:通过分析源数据库中的日志变化获取更新数据。该方式同样严重依赖于源数据库类型,对于没有提供日志分析工具或接口的数据库而言,实施难度较大。

(3)时间戳:根据源数据表中的时间字段提取增量数据。主要有两种方法:①建立一个临时表存储上次同步时间,同步任务执行时,读取当前时间和上次同步时间(临时表),将源数据表中大于等于上次同步时间,且小于当前时间的记录读取出来同步到目标数据库中。如果同步过程中没有发生错误,则更新临时表中的上次同步时间字段,如果发生错误,临时表中的上次同步时间保持不变。该方式在数据同步出现错误时,部分数据已经同步到数据库,导致在下次执行同步任务时会出现大量重复数据,需要浪费很多时间执行去重操作,从而大大降低了数据同步效率;②对方法①进行改进,设置一个时间容错窗口t,在同步任务失败时,选取目标表中的最新时间减去t作为临时表中的上次同步时间,因为选取的是目标表中的最新时间,所以该时间点已有数据被抽取到目标数据库,再往前回溯一小段时间t,从而保证在当前时间点目标数据库中的数据不会缺失。然后,按照方法①同时抽取源数据库和目标数据库中满足条件的数据,对这些数据进行去重操作,最后将去重后的数据更新到目标表中,任务完成后更新临时表中上次的同步时间字段。该方法在一定程度上减少了同步失败情况下的重复数据集合,提升了同步效率。然而,以上两种方法都无法做到对已删除数据的同步操作。

(4)全量数据比对:将源数据表中的全量数据与目标表中的数据一一进行比对,从而找出新增、修改以及删除的数据,进而根据不同情况对不同类别的数据进行处理。该方法能在最大程度上捕获所有数据变化而基本不影响业务系统正常运行,但是同步效率较低,适合对实时性要求不高的场景。

由于高校人事系统记录了教师的个人基本信息、履历、职称变化、部门变化等,在组织机构改革过程中涉及到部门名称、部门人员以及部门编码等变化,所以在将人事系统中的部分数据表同步到数据中心过程中,需要考虑历史记录保存情况。当然,由于操作失误或其它情况导致的数据删除记录也需要捕获到数据中心。总之,针对该情况,需要一种无损的数据增量同步方法。所以本文借助Kettle多线程图形化操作的特点,采用全量数据比对方式,并以人事系统中部分数据表为例,提出一种无损的增量数据同步方法。

3无损增量数据同步方法

以人事系统个人基本信息表为例,表结构如表1所示

该流程一共分为6大步骤:

步骤1:使用SQL语句分别选取源数据表和目标数据表中有价值的字段,并按相同规则进行排序,得到数据集合A和B,然后将两个数据集合按主键进行合并记录,获得两个数据集合比较之后的比较结果集G。因为人事系统中部分字段(如手机号、证件号、住址等)涉及敏感信息,所(仅列举部分关键字段)。

从表1中的表结构可以看到,职工号为主键,每个新人职的员工有唯一的职工号,另外姓名、性别、民族、籍贯、出生日期、来校年月、毕业院校等字段信息为固定信息,一般情况下变动不大,不需要留存历史变化信息,如有更新,直接更新到数据中心目标表中的对应字段即可。但政治面貌、所在单位、党政职务、专业技术职务、在职状态、人员类别等字段则会随着工作时间的延长而发生巨大变化。一般情况下,政治面貌、党政职务、专业技术职务等字段有专门的表记录变化信息,而所在单位、在职状态、人员类别则没有对应的表记录变化的历史数据,能够看到的只是当前状态数据,这对于数据中心建设及后续数据分析工作是十分不利的。

例如某员工入职一年后从信息学院调到科研处,所在单位和人员类别均发生了变化,如果在数据中心只存储最终数据结果,在分析历年各部门人员数量以及学校历年人员类型组成时,则丢失了部分重要的数据支撑,最终分析结果必然是错误的。所以对于这种数据同步情景,保留历史变化记录是必要的。再比如由于操作人员重复录入或录入错误而删除了一条记录,如果在数据中心不记录删除结果,则在进行相关人员变化的数据分析时也会出现类似错误。

基于該需求,笔者设计了一种基于Kettle的无损增量数据同步方法,其流程如图2所示。以在合并之前需要对A集合中的敏感字段进行加密,加密算法采用Java编写,在Kettle中导入并调用生成的接口包。

步骤2:G集合中包含名为flagfield的字段,此为合并记录控件产生的字段,表示比较结果。其有4个值:deleted(已删除)、new(新增)、changed(有更新)、identical(相等)。为了便于之后比较以及缩小目标数据库的存储空间,对这几个值进行映射变换得到集合H。映射方式如表2所示。

步骤3:根据flagfield字段过滤H集合中的记录,其中flagfield值为空的记录为没有变化的数据集合,不作操作,flagfield值不为空的记录为有变化的数据集合T,继续下一步操作。

步骤4:向T集合中的记录添加当前系统时间字段,作为目标数据库中的同步时间s_time(在流程开始前,需要先在目标数据库中建立相应表结构,并额外增加flagfield和s_time两个字段用来标记当前记录的操作性质和同步时间),接下来执行过滤记录控件,其中对于flagfield值为“I”的记录集合,在目标数据库中执行插入操作,对于flagfield值为“D”的记录集合,在目标数据库中执行更新flagfield及s_time字段值操作。根据Kettle控件特性,这两种情况可以合并为一个控件执行,也可以分开。另外,获取系统当前时间步骤也可放在add步骤之前。flagfield值为“U”的记录集合F由于需要记录历史数据,不能只进行更新操作,需要进行下一步处理。

步骤5:对集合F进行字段选择,留下主键,然后根据主键逐条获取目标数据库中与主键字段相等的记录,构成集合R,最后将R插入到目标数据库对应表的更新记录表中。因为Kettle是并行批量执行的,所以需要等步骤5完成后才能进行下一步操作,即步骤6的目标数据表更新操作。

步骤6:对集合R进行字段选择,留下主键,然后根据主键逐条获取源数据库中与主键字段相等的记录,构成集合U,最后将集合U更新到目标数据库表中,与步骤1相同,在更新前需要对U集合中的敏感字段进行加密。

4结语

本文提出的无损增量数据同步方法在实际应用中具有一定参考价值,在小数据量、对实时性要求较低且需要完整记录变化数据的情景下,能够很好地满足无损数据采集需求,对接下来的数据时间切片分析起着重要作用。然而,本方法也存在着一定局限性,即需要每次对数据进行全量比对,在数据量较大或仅增量更新(如一卡通消费)的情形下则不宜使用。

猜你喜欢

教育大数据数据采集
狭义教育大数据在英语教学中的应用模式
基于开源系统的综合业务数据采集系统的开发研究