基于Kettle数据传输与同步方法的研究

2021-05-17 15:02郭德卿徐国强李娜
汽车实用技术 2021年8期
关键词:触发器数据源插件

郭德卿,徐国强,李娜

(中国汽车技术研究中心有限公司 中汽数据(天津)有限公司,天津 300300)

引言

随着数字时代的到来,数据科学技术不断发展,社会各行各业都越发地重视数据,数据使得行业间更加密切,企业对数据需求的及时性也相应提高。基础数据点对点传输、数据更新同步则尤为重要。

数据传输和同步的方法多种多样,本文将介绍以Kettle作为工具的一些使用方法。

Kettle是一款开源的ETL工具,主要用来完成数据的抽取,清洗、转换和加载等数据处理方面的工作。Kettle不仅提供了简单明了的图形界面,它的流程式设计也非常方便易用。功能特点方面,Kettle支持全面的数据访问及多平台部署,拥有优秀的插件架构扩展性,经过长期的优化升级,全面实现高效稳定的数据处理[1]。

1 Kettle作业和转换

Kettle的控件包含两个部分,即作业(Job)和转换(Trans-form)。

作业属于步骤流,是将若干独立的步骤,按照先后的执行顺序形成一个工作流。生活中大部分事务都可以形成工作流,比如我们冲咖啡这一举动,需要经过以下步骤:烧水、准备咖啡杯、倒入咖啡,开水冲泡。每个步骤有着先后顺序,按照顺序组合后,就完成了冲咖啡的举动。Kettle作业原理也是如此,作业中的每一个步骤,都必须等前面的步骤执行完毕,后面的步骤才会执行,如此待完成全部步骤后就完成了此作业。

转换属于数据流,是指从输入(Input)到输出(Output)之间的数据流动,针对的是在数据流动过程中的每一条记录的处理,比如通过一定逻辑的输入,经过转换,再输出为我们想要的数据。转换通常作为作业中的一个步骤而存在。转换是Kettle开发的基础,也是本文主要介绍的功能模块[2]。

2 Kettle关键技术

Kettle作为ETL工具包含了三方面核心技术功能,即抽取(Extract)、转换(Transform)、装载(Load)。

数据抽取是所有工作的前提,是将各种生产环境中的数据提取到开发环境中,一般情况下,企业在生产制造过程中,会产生大量的相关生产数据,而我们的生产环境通常包含多个不同的数据源。Kettle可以支持多种数据源输入,通常我们用到的有两种:数据库输入和文本文件输入。

图1 数据输入

然后通过预设定的逻辑进行数据转换处理,通常有:字段选择、过滤、排序和字段处理等。

图2 数据转换

最后输出结果数据,主要包括表输出、插入/更新、文本输出等(图3)。

3 Kettel数据传输与同步的方法

Kettle以工作流的方式定义数据传输与同步的规则,通过执行任务实现对数据的更新加载。此过程有多种方案可以采纳,如:

(1)通过触发器进行数据同步,此方法实现了实时数据同步,但由于要在生产环境建立触发器,可能会对生产环境产生一定影响。

图3 数据输出

(2)通过时间戳进行数据同步,此方法原理是数据发生变化时,时间戳会记录数据发生变化的时间,根据时间比较进行数据传输同步。

(3)通过数据比较进行同步,此方法原理是两边数据比对进行数据传输同步,相对时间戳法效率较低,一般用于实时性较低的需求场景。

(4)通过全表拷贝进行同步,此方法是定期清空目标数据源,并将源数据整体导入目标数据源,此方案开发简单,但只适用于体积较小的数据[3]。

以上四种方法,我们会根据不同的业务场景,酌情进行使用。在数据同步过程中,包含以下几点核心处理环节:

(1)数据库连接:Kettle提供了多种数据库连接方式,打开Kettle的DB连接中,可以配置所有数据库的连接,包括JDBC、ODBC和JNDI,多数情况下,我们使用JDBC和ODBC两种方式。值得注意的是在成功配置数据源之后,该数据源默认为局部数据源,可将此数据源共享为全局数据源,在创建其他新转换时可直接使用。

(2)抽取数据:Kettle数据抽取主要使用输入模块的表输入来实现,通过SELECT语句,从数据库抽取输入数据。提取表中数据后,选择、比对、修改需要同步的数据,根据业务逻辑进行相应的新增、修改、删除目标表的数据,需要注意的是前后数据表需要同步数据的字段必须一一对应。

(3)数据转换:Kettle里面没有单一的数据转换步骤,是有许多步骤组合起来完成数据转换的功能。由于各业务系统数据格式不统一、数据不规范,需要使用大量的数据清洗转换工作来实现数据规范化,针对具体数据内容,通过建立数据标准化逻辑,完成对基础数据的规范化处理。Kettle一整套的数据处理转换组件功能十分强大,下面就我们经常用到的功能进行介绍:

增加常量,经常用到ID作为主键,我们可以在Kettle中增加序列,并且能够自定义序列步长;

计算器功能,做一些简单的数学运算及日期相关计算;

字符串处理,替换指定字符,大小写转换和特殊字符转换等;

行列转换,先进行数据聚合排序,然后进行列转换;

字段筛选,常用作数据转换条件,当满足条件时可执行其他转换。

(4)数据校验:基于各业务场景的数据质量问题,实现数据项的基础逻辑关系校验,剔除不符合校验规则的数据,完成数据质量检查,解决业务数据排查困难的问题。

(5)数据输出:Kettle数据输出主要使用输出模块的表输出来实现,但根据业务需求不同,我们可以选择需要的插件,比如插入/更新插件具备更新、插入等功能,但此插件相对于表输出来说效率相对较低[4]。

4 Kettel数据传输与同步的应用

对于数据及时性有较高要求的业务场景中,比如我们汽车产业中的生产制造数据,每时每刻都会有汽车下线,这就是说汽车生产数据是实时变化的,要求我们数据同步相应迅速快捷,此业务场景需要使用触发器来实现数据的同步传输。以insert为例,我们在生产环境的源表中建立一个insert触发器和一个表结构与源表相同的临时表,每当有新数据插入时,都会将新插入的数据自动的导入临时表,然后使用全表拷贝的方法将临时表同步到开发环境中,并将临时表插入目标表中,这样就完成了数据库之间增量数据的更新。除了insert可以建立触发器,还可以在update和delete时建立触发器,原理是一样的。

在日常工作中,我们用到最多的数据同步方法是时间戳法。相较于触发器的使用,时间戳开发和使用上更加简单,不足之处就是时间戳必须在两边增加一个时间字段,会占用存储空间,并且此方法不能进行delete的同步操作。时间戳法使用上,我们首先要创建一个时间戳表,记录每一次抽取数据的时间。然后,每次获取时间戳中最后一次抽取数据的时间,我们采用大于max(取数时间)作为同步条件,取到上次抽取以后的数据,再将其插入到目标表中。最后将本次取数时间插入时间戳表,完成时间戳的更新,为下一次数据同步做准备。具体工作流程如下:

图4 数据转换

图5 表输入

数据比较的同步方法,多数情况在需要将新老数据对比,做相应操作转换中进行数据同步,可根据数据比对变化做相应的删除,插入和更新操作。相对时间戳法,数据比较法是一个更加完善的数据同步方法,但由于同步效率较低,我们一般用于数据体量相对较小的数据库中。它的核心思想是将新老数据合并处理,根据主键判断两表对应数据是否一致,合并记录后会形成标识位,用于判断每一条数据的状态,即更新、删除、新增和不变。最后根据数据状态标识来对目标表进行删除、插入和更新等相对应的操作。

图6 表输出

图7 数据同步

全表拷贝法,顾名思义,就是清空目标表,将源表整体插入到目标表中,此种方法多数用于维度表同步方案中,要求更新频次较低,数据量较少,同时开发维护也最为简单便捷。

在进行数据同步之前,我们需要根据业务需求,制订一套专业的数据传输与同步方案,编译为Kettle可识别的流程和规则,从而持续高效地实现数据的自动同步[5]。

5 结束语

本文通过对Kettle工具在数据传输与同步的应用研究,针对四种数据传输与同步方法,进行了详细的解析说明。实现了数据库中新老数据表的同步更新,构建了业务数据库的正常维护流程。Kettle允许用户管理来自不同数据库的数据,通过提供一个图形化的开发环境,实现数据传输与同步。Kettle支持绝大部分数据库,可以做到不同类型的多个数据库之间数据的同步更新,既满足了业务场景需求,降低了运维管理人员成本,提高了数据库使用效率,解决了不同数据库之间的共享问题。

猜你喜欢
触发器数据源插件
配置触发器有条件启动Windows服务
用好插件浏览器标签页管理更轻松
基于Multisim14.0的双D触发器应用与仿真
触发器在酒店管理系统中的应用
图表中的交互 数据钻取还能这么用
请个浏览器插件全能管家
基于jQUerY的自定义插件开发
基于Excel的照片查询系统开发与应用
再谈利用邮件合并功能批量生成准考证
数据有增加 图表自适应