【转发】利用子转换重构ETL项目

1. 使用背景数据库

在本团队参与的大数据项目开发过程当中,须要从各业务系统抽取数据录入数据中台进行管理,通过技术调研后决定采用CKettle。微信

由于数据中台中对象ID具备惟一特性,因此在制做转换中须对ID进行惟一性校验。app

由上述缘由形成在每一个转换中都须要重复添加此校验步骤,而且进行转换修改时,若是此判断步骤须要修改,会形成大量重复操做,不便于开发与维护。大数据

在实践中发现Ckettle高级应用映射(子转换)能大量简化上述操做。子转换具体原理能够参照CKettle官方帮助文档:优化

https://ckettle.ccsaii.com.cn/help/StepPluginType/Mappingspa

那么下面咱们就项目中遇到的该问题作出以下的详细说明。.net

2.  案例

2.1 项目现状(优化前)

13d

 

2对象

 

上述图1与图2红框处能够看出,在各个业务转换中存在同样的entity_id惟一校验步骤,形成大量的重复转换步骤。blog

2.2 采用子转换优化后

 

3

 

4 

如上图优化后的转换中的红框标示处,是经过映射(子转换)的方式将原有的重复步骤封装成子转换。

详细操做步骤以下所示:

a) 将上述重复步骤封装成一个新的转换,如图5所示;

 

图5 封装后的子转换

 

子转换内容说明以下:
1)  子转换中,如需操做数据库,则应与父转换的中的数据库配置保持一致。 2)  子转换的入参,约定了从父转换到子转换之间传递的参数。形如方法的入参。此例中的配置以下图所示

 

图6 映射输入规范

3) 父转换中被抽离出来的步骤。

4) 子转换的结束标识。形如方法定义的结尾。


b) 在父转换中经过映射(子转换)的方式替换掉以前的步骤。

 

图7 父转换

 

 

8 父转换中配置映射子转换

 

c) 并对父转换中“映射(子转换)”进行上图相关配置

1) 子转换的路径。

2) 字段映射关系。源字段为父转换中流中的字段,形如方法的实参。映射字段为以前子转换所设置的字段,形如方法的形参。点开后的界面以下图所示。

图9 映射配置 

3) 将子转换中处理后的入参返回到父转换的流中。形如按地址传参。


d)  执行父转换,效果以下。已成功生成了新的entity_id,同时对应数据库中也进行了entity_id的同步。

图10 执行后的父转换

 

3. 总结

CKettle映射特性让转换有了可重用性,让ETL程序具备简洁性。其输入、输出步骤及参数配置很是灵活,几乎可让任何复杂的转换重构成可重用的子转换。若是转换比较大,也能够重构成连续的子转换组合实现。子转换让转换数据流结构化,更容易理解。

在本项目中,经过子转换的方式对43个转换进行了优化,将其中具备重复调用的步骤按功能拆分红各个子转换,使整个转换显得简洁明了,减小了大量重复操做,使其更加便于开发与维护。


本文分享自微信公众号 - Kettle博士(gh_f656c3d7ba54)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索