用ETL工具kettle实现的一个需求

来源:互联网 发布:阿里云幕布的申请 编辑:程序博客网 时间:2024/05/21 04:23

通过最近一段时间的学习,对kettle有了大致的了解,也通过该工具实现需要的需求。

我介绍下我的需求:

      数据流程:源(外购数据,网页抓取,人工采集)

      源和目的端的表结构完全不一样,这里就包含了三种情况:一对一、一对多、多对一。其中一对多包含两种情况:一个表的一条数据到一个表的多条数据,即横转纵。这个插件在kettle中有。第二种是一个表的一条数据到多个表的多条数据,这种情况就相当于是多个一对一的情况。多对一就是反过来了。除了这些其实还有一个特殊的需求,就是表中一个字段中会存在一个公式,比如A+B,这里的A和B都需要替换成其他表中对应字段的值。这是一种特殊的需求,需要开发自己的插件来实现。

 

      设计方案判断是否可行标准。

1、     

 

新增

修改

删除

一对一

 

 

 

一对多

 

 

 

多对一

 

 

 

2、对每行数据可以进行日志记录。

3、对每次处理的数据条数可以进行控制。

 

 

      设计方案:

            对于源表的每条变化都要进行记录,在源表上建立触发器,对增删改进行监控。所以就需要一张变动表  来记录所有的记录。这里还有一种方式,就是通过时间戳的方式,就不需要记录每一条记录的时间了。

            对于源表到目的表的对应情况,以及需要用什么样的转换过程,需要一张配置表。

            由于转换对应关系是通过存储过程来实现的,所以就需要一个目的临时表,而不是直接进入目的表中。目的临时表比目的表多两个字段。用来表示源和目的的关系。

            这样就设计完了。至于实现就见下:

      实现方式:       

            对每一条数据进行提取转换装载后再进行下一条的整个流程,可想而知,本来kettle就是并行的,结果现在就是单行了,效率低的吓人。在目的表中为10W条数据的时候,速度在每分钟150条左右。这根本不符合需求,虽然需求只需要每分钟500条就够了。第一种需求是为了对每一条数据进行详细记录是否成功,如果失败可以及时的知道,并且处理。所以进行一下的更改。将提取转换 和装载分开进行,而且是批量进行。对于日志就在存储过程中进行记录。(计划开发个插件进行记录。)。

 

 

 

图就发不了了,如果大家有什么疑问给我留言。我看到后一定给各位回复。。。。。。

原创粉丝点击