您的位置:首页 > 其它

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

2010-12-29 09:36 197 查看
通过最近一段时间的学习,对kettle有了大致的了解,也通过该工具实现需要的需求。

我介绍下我的需求:

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

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

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

1、

新增
修改
删除
一对一
一对多
多对一
2、对每行数据可以进行日志记录。

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

设计方案:

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

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

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

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

实现方式:

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

图就发不了了,如果大家有什么疑问给我留言。我看到后一定给各位回复。。。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: