张 硕,赵卓峰,王桂玲,刘 杰
(北方工业大学 大规模流数据集成与分析技术北京市重点实验室,北京 100144)
ETL(Extract-Transformation-Loading)即数据抽取、转换和加载的概念是随着数据仓库的产生而产生的[1],可以看作是一类主要的数据集成技术手段,传统的ETL方案是用户从数据源抽取所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中,为信息研判分析提供决策支持的数据.信息研判分析是指对数据进行关联和整合后产生的一个判定性的结果进行分析,以为后续工作提供依据的过程.目前企业中存在大量动态、突发的业务需求,需要采用探索与执行并行的方式不断尝试着将数据联系起来进行研判分析活动,用户只能根据当前的结果来决定下一步的数据转换和关联操作,难以通过传统的预定义式的ETL方案实现.
利用客户端工具实现ETL过程是最普遍的做法,但利用ETL工具[2]建立ETL流程是一项非常繁琐并且对专业技能要求很高的工作,需要对ETL有一定的研究基础才能很好地利用工具进行研判分析,不具有通用性和普遍性,传统的ETL方法要求开发人员首先简单的描述业务规则,然后精确地详细设计如何一步步地实现这些规则[3],操作性较差,而且一旦在构建ETL任务过程中发生错误,进行错误排查也是一项耗时耗力的工作,对于非计算机专业的人员而言门槛较高,学习起来难度较大.一个ETL流程的执行对应一种结果数据集,若要根据结果再继续研判分析就需要重新建立ETL流程,工作强度较大,而对于没有确定的数据源、数据抽取和加载方案的这种逐步尝试进行研判分析的情况显然是不适应的.
针对无法预先定义研判分析方案和构建ETL流程复杂的问题,提出动态ETL流程服务,“动态”表示该服务不需要预先创建指定结构的目标表,也不需要预先定义好ETL流程,能够随着用户需求的改变而改变.将构建ETL流程的过程封装为服务,屏蔽底层实现细节,特别是数据转换和数据关联操作的复杂性,转化为非IT人员易于理解和操作的方式,用户只需要通过界面进行简单的配置操作即可完成ETL流程的构建工作,可以最大限度地降低用户建立ETL流程的复杂度,并且能够避免人工操作出错的问题.
本文第二节介绍了相关工作;第三节详细阐述基于动态ETL流程服务的探索式研判分析基本思路;第四节给出动态ETL流程服务模型相关定义;第五节介绍动态ETL流程服务的实现过程和并发性能的优化方法;第六节结合某公安联合作战指挥应用案例对动态ETL流程服务进行验证.
当前数据的处理主要是通过ETL工具完成,这些工具往往都提供了图形化界面,在一定程度上为用户提供了便利,但对于非IT人员而言,要建立一个ETL流程实现难度较高.目前大多研究都是针对ETL工具的,提高其通用性,降低复杂度,文献[4]和文献[5]都是从数据源的层面提高ETL工具的通用性,其中文献[4]通过搜索数据源找到目标表与源数据表的映射关系,对各种异构的数据源进行提取和转换成统一格式的目标表.文献[5]根据元数据信息在服务器中创建其对应的表的视图,屏蔽了各异构数据源的差别.文献[6]实现了一个通用化的ETL系统,简化了ETL的开发环节.文献[7]提出了一个ETL优化框架并对ETL过程的逻辑优化进行了研究,得出了最小时间的ETL工作流.文献[8]提出一种基于统一视图模型的ETL过程建模方法,提供源数据ET抽取映射,主要完成属性名称、属性类型、属性语义等方面的转换和统一,依靠视图重用性简化用户操作,降低复杂性.
还有一些研究是将ETL过程与服务相结合的,文献[9]将ETL作业的执行操作封装为服务,通过数据 ETL 服务器定义特定的作业,将其发布为 Web Services,服务请求者调用作业执行服务执行作业.文献[10]对于一些ETL工具不支持的异种数据源采用包装成Web服务的方式进行访问,提供标准统一的访问方式,并提供Web服务方式的数据抽取.以上这些研究对于作业执行以及数据访问和数据抽取操作进行服务封装,简化了用户的一些操作,但是没有考虑到无法确定构建ETL流程方案的情况用户面临的瓶颈问题,用户利用数据进行研判分析工作的最繁重也最困难的工作就是建立ETL流程,要从根本上减少用户的工作量,简化用户操作,由此想到将ETL流程封装为服务,用户只需要进行简单配置就能完成.
Web服务实现方案中,因为基于REST[11]式Web服务的实现和操作与基于SOAP和XML-RPC方式相比则更为容易和简洁[12],以至于越来越多的Web服务开始采用REST风格来进行设计和实现,涉及到电子商务、搜索、社交、支付等多个平台的大力支持.例如,Google已利用REST的设计原则改善了Web搜索服务功能,Amazon和Ebay等也根据REST原则实现了用HTTP+URI+XML的服务[13],还有社交平台FaceBook以及支付平台Paypal,都提供了REST风格的Web服务.传统以WSDL为代表的结构化Web服务正逐渐被RESTful Web服务取代[14],选用REST架构风格将构建ETL流程封装为服务是可行且适合的选择.
在探索式研判分析的过程中,用户不断提出和改进需求,通过分析当前结果来确定最终结果或明确下一步需求,以此反复,直至得到满意的结果.例如,公安机关要处理的案件类型多样,复杂多变,每个案件的发生情况各不相同,突发案件也时有发生,有时候现场线索模糊不清,不能给出确切的嫌疑人范围,无法确定嫌疑人信息,交织信息繁多,导致公安人员不能确定最终想要的数据结果集,具体想要提取哪些数据不明确,只能根据每次的结果进行分析研究,找出数据的关联关系,以明确下一次的研判分析方案,逐步尝试得出有效信息,这是一种典型的探索式研判分析的过程.
本文提出的动态ETL流程服务注重对于数据源、数据抽取和加载方式的不确定性问题的快速有效解决方案,以支持探索式研判分析,基于动态ETL流程服务的探索式研判分析活动如图1所示,图中的小方块代表通过请求访问动态ETL服务后获取到的数据信息,椭圆和三角形的嵌套组合代表随需求调整而变化的动态ETL流程服务,椭圆表明服务的表现形式没有改变,不同角度的三角形表明服务可以根据用户需求的改变调整请求参数的配置完成不同ETL流程的创建.图中涉及到两类箭头,其中,空心箭头表示用户操作,包括配置服务请求参数和请求访问服务操作,实心箭头表示动态ETL流程服务操作,包括获取源数据和服务返回结果操作.用户在初始阶段并不能确定最终的研判分析结果,只能采用探索与执行并行的方式进行研判分析,用户首先尝试请求访问动态ETL流程服务,得到一个数据结果集,根据当前结果调整需求,继续发送请求,服务接收请求进行处理返回结果,以此反复,直到用户得到满意的结果才结束这个过程.
图1 基于动态ETL流程服务的探索式研判分析 基本思路Fig.1 Principle of exploratory judgment analysis based on dynamic ETL process service
基于动态ETL流程服务的探索式研判分析基本思路如下:
①对于非IT人员的用户,不能很好地理解Web服务,为此需要将Web服务抽象化,转化为用户易于理解和操作的可视化界面进行服务的参数配置完成对服务的访问操作;
②用户可以根据当前结果更改服务请求参数以进行下一次服务请求,获取所需数据,支持探索与执行并行的方式进行研判分析活动;
③屏蔽底层实现细节,用户不需要手工建立ETL流程,通过访问动态ETL流程服务完成ETL流程的创建工作,对源数据的提取也无需操作数据库,通过界面配置选定数据源.
利用ETL工具构建ETL流程是复杂且耗时的一项工作,同时要求使用者有一定的专业基础,动态ETL流程服务将构建ETL流程的过程封装为服务,用户通过参数配置的形式,完成ETL流程的构建.
定义1.时间戳(TS).时间戳是ETL过程中进行增量数据抽取的依据,分为两种类型,一类是创建时间(newTS),另一类是更新时间(updateTS),时间戳可以表示为一个可变集合{…TS},当只包含其中一类时间戳时,TS={newTS}或TS={updateTS},当包含两类时间戳时,TS={newTS,updateTS},此时以这两者中较大值作为增量数据抽取的时间戳标记.
定义2.数据源集合(DSC).数据源集合包含ETL过程所需的所有数据源以及多源数据的关联操作,由用户自定义设置,当数据源只有一个时,DSC的表示形态在下面的内容中进行说明,多个数据源时将其表示为DSC={DSi|i=1,…,n}∪{DSLj|j=1,…,n-1},其中:
DS是数据源,由于用户需求的不确定性和随时调整的特性,它可表示为一个不定元组DS=
TN是指定的数据源表名;
KF是关键字段,用于数据抽取的排序字段,也用于多源数据的关联字段,不需要显式定义,通过以下介绍的DSL设置关联;
TS是时间戳,在此为可选元素,若要采用时间戳增量比对的数据抽取方式,则DS=
Q是数据查询,它是一个SELECT查询语句,用来获取符合用户要求的所有数据,不需要显式定义,通过界面选择数据源及过滤数据操作得到;
DSL是数据源可视化链接,通过界面可视化连线操作的方式将各个数据源关联起来.
以card(DS)表示DS集合的元素个数,当数据源只有一个时,即card(DS)=1时,不需要数据关联操作,此时数据源集合可表示为DSC={DSi|i=1,…,n}.
定义3.ETL流程服务.ETL流程服务是实现快速构建ETL流程的软件服务,从构成角度来看,可以将其表示成一个四元组
URI是ETL服务的唯一标识;
DSC是数据源集合;
TI是服务调用时间间隔,用以指定调度器进行任务调度的时间间隔,进行定时抽取数据,加载至目标库;
DEST是目标表名;
TYP是ETL服务类型,不需要显式定义,由TI的值与DS的表现形式决定,若TI=0,则TYP是手工触发ETL服务,若TI≠0∧DS= KF,Q>,则TYP是全量比对定时ETL服务. Kettle是目前较为主流的一款开源ETL工具,数据抽取高效稳定,本文提出的动态ETL流程服务是基于Kettle实现的,将利用工具构建ETL流程的过程封装为服务,转化为用户易于掌握的方式将数据联系起来,为研判分析提供决策支持. 图2 动态ETL流程服务实现流程Fig.2 Dynamic ETL process service processing flow chart 用户通过界面配置数据源及其关联关系、时间戳字段和调用时间间隔注册动态ETL服务,服务器端解析服务请求信息,获取JSON数据并验证JSON数据的正确性,若JSON信息有误,则直接返回JSON有误的错误信息.若正确,则根据JSON获取创建ETL流程的参数,传给动态ETL流程服务接口,首先创建目标表,若创建失败则直接返回目标表创建失败的错误信息,否则继续判断是否建立时间戳任务,若为非时间戳任务则根据任务类型建立全量比对数据抽取转换,否则再根据任务类型建立时间戳作业和相关转换,若任务建立失败则直接返回转换或作业建立失败的错误信息,否则将任务保存到资源库中,并提交给调度器,若保存失败则直接返回保存失败的错误信息,否则返回建立成功的响应信息,完成ETL流程构建.具体实现流程如图2所示. 实现流程的伪代码如表1所示. 动态ETL流程服务可以支持多用户并发请求,如何提升并发性能,支持更多用户请求,更快速地给用户响应是当前需要考虑的问题.由于该服务中最耗时的部分是排队将成功创建的ETL流程保存到资源库的过程,若要提高并发性能,可行的方案就是将创建完成的ETL流程保存到资源库的过程剥离出来,将一个完整的ETL流程构造过程分为ETL流程的创建和ETL流程的保存两个部分,使用户无需等待ETL流程成功保存到资源库,当ETL流程创建成功后即通知用户,此时服务可以继续接受请求,即采用异步的方式实现动态ETL流程服务.目前主要的实现异步机制的方案是消息中间件[15],消息中间件提供了异步通信的方式,同时还具有并发机制的特性,具备处理多线程的能力,它将耗时比较长或者消耗资源的请求排队进行异步处理,减轻服务器压力并增加系统的稳定性. 表1 动态ETL流程服务实现 1. IF checkJson(JSON)2. IF createTargetTable(DEST)3. IF isTimeStamp(DS)4. startTimeTrans←genBeginTimeTrans(TS,DSC,DEST)5. dataSychTrans←genTimeStampTrans(TS,DSC,DEST)6. endTimeTrans←genEndTimeTrans(TS,DSC,DEST)7. job←genTimeStampJob(startTimeTrans,dataSychTrans,endTimeTrans)8. saveTransToRepo(startTimeTrans)9. saveTransToRepo(dataSychTrans)10. saveTransToRepo(endTimeTrans)11. saveJobTorepo(job)12. END IF13. ELSE 14. trans←genTrans(DSC,DEST)15. saveTransToRepo(transMeta)16. END ELSE17. END IF18.END IF 利用消息中间件的异步通信机制将动态ETL流程服务分成接收服务请求和处理服务请求两个部分,以处理更多的服务请求,在本文中选用RabbitMQ[16,17]实现,如图3所示,接收服务请求部分接收到用户请求后创建ETL流程并将创建好的流程发送到RabbitMQ,处理服务请求部分监听RabbitMQ队列并将ETL流程对象存储到持久化队列中,然后通知消费者将ETL流程对象保存到资源库中,之后将成功创建ETL流程的消息发送给RabbitMQ,RabbitMQ将消息返回给用户,通知用户成功创建ETL流程. 图3 基于消息中间件的并发性能优化Fig.3 Concurrent performance optimization based on message oriented middleware 使用Web Service 性能测试软件JMeter对优化前后的动态ETL流程服务进行并发测试,分别对300和600的并发量各进行10次测试,发现并发量为300时,优化前后的服务都能良好的支持,没有出错信息,并发量为600时,优化前的服务出现了5个连接超时的异常,而优化后的服务没有出现异常,运行稳定. 本部分结合实际应用对动态ETL流程服务进行验证,重点以一个抓捕盗窃案犯罪团伙的案例来说明动态ETL流程服务可以实现无法预先定义数据集成方案时的ETL流程的快速构建,即时进行数据集成,能有效支持探索式的研判分析,帮助公安人员进行案件侦破工作.这起案件发生在B市,公安人员经过初步侦察和线索推断,此次案件嫌疑人来自C市身份证以“511721”开头的可能性最大,并且这些嫌疑人很可能在B市有过旅店登记住宿.通过以上线索,公安干警小李获取案发前后2天内以“511721”开头的身份证号. 人员的住宿登记信息,需要的数据只涉及到住宿信息(ZSXX)表,具体获取信息如下:姓名(NAME)、身份证号(ID_NUMBER)、旅店名称(HOTEL_NAME)、入住时间(CHECKIN_DATE)和退房时间(CHECKOUT_DATE).这些要提取的数据不需要增量抽取和定时加载,故无需设置时间戳信息,建立单表非时间戳任务,只需要调度一次即可,通过可视化界面配置访问动态ETL流程服务的参数信息,请求访问动态ETL流程服务. 图4 服务请求参数设置Fig.4 Service request parameter settings 根据结果发现在此时间范围内共有100人进行住宿登记,涉及到六家旅店,将本次的目标表作为源数据,按照旅店名称划分数据,并按照入住时间进行排序,重新设置请求参数,经过六次请求访问动态ETL流程服务对数据进行划分,分别查看结果发现在案发当天X旅店有8人办理入住,其中有6人入住时间相差小于1小时,这6人中有5人退房时间相差小于半小时,将此次X旅店住宿信息表作为源表,设置请求参数,将这5人信息单独存放到嫌疑人员(XYRY)表中,之后将该表与重点人员信息(ZDRYXX)表关联,重点人员信息表获取如下信息:姓名(NAME)、性别(SEX)、年龄(AGE)、身份证号(ID_NUMBER)和案件类型(CASE_TYPE).设置请求参数,访问服务,具体设置如图4所示,查看结果发现其中有3人具有盗窃犯罪前科,之后小李分别调取这3人在案发前后两天的通话记录信息,发现他们在此期间有电话往来,由此确定他们是嫌疑人,经过最后调查取证这3人是作案人员. 在实际应用中重点人员监控也是公安部门较为常见的业务需求,公安干警小李想要对吸毒人员进行重点监控,他需要获取重点人员信息和网吧上网记录信息,涉及到重点人员信息(ZDRYXX)表和(WBSWXX)表,此时小李可以通过界面配置参数,选择需要获取的字段信息,并利用可视化数据源连线操作进行多表关联,配置完成后访问动态ETL流程服务获取所需信息,根据当前结果调整参数配置信息再次访问服务获取信息,当发现吸毒人员聚众上网时,则需要做好预警防范工作,以防违法犯罪案件的发生. 在上述案例中,用户是根据上一次的服务返回结果进行研判分析来确定当前的需求,无法预先定义ETL流程,只能摸索着、探索着进行研判分析,不断调整需求,传统的解决方案是根据需求利用ETL工具不断地构建ETL流程,这是一项非常耗费人力和时间的工作,而且ETL很复杂,需要专业人员操作.而动态ETL流程服务采用REST架构风格将ETL流程封装为服务,使用户无需通过ETL工具建立流程,也无需知道具体的ETL构建流程,只需要通过界面进行简单的配置就能完成ETL流程的构建工作,通过数据源连线操作屏蔽数据关联的复杂性,易于用户理解和操作,用户只需要经过多次服务访问操作,即可将数据转化为信息,得出最终结果.本文提出的动态ETL流程服务能更加快速地支撑需求的动态演化,支持探索式研判分析,屏蔽计算机专业相关的复杂性和技术性,使非IT人员实现快速构建ETL流程,拓宽了用户群体. 在如今的信息化时代,信息系统层出不穷,如何有效解决将分散的数据转化为有效信息的问题是当前的重要课题,而利用数据进行研判分析的需求往往是动态变化的,无法预先定义的,采用现有的ETL工具逐步根据需求进行研判分析活动工作量较大,难度较高.采用REST架构风格将ETL构建过程封装为服务,能有效支持需求的动态演化,支持探索式研判分析,边探索边改进,得出最终满意的结果.此外,还利用RabbitMQ进行了并发性能优化,支持更多的用户请求.结合案例对动态ETL流程服务进行了验证分析,结果表明该服务能够有效地进行探索式研判分析,展示数据的潜在关系,帮助用户进行关键信息的提取,有很强的易用性,使非计算机专业人员也能快速构建ETL流程,拓宽了用户群体,具有良好的应用价值.5 动态ETL流程服务实现及其并发性能优化
5.1 动态ETL流程服务实现
5.2 并发性能优化
Table 1 Processing of dynamic ETL process service6 案例与评价
7 结束语