需求:把A库中N个表抽取至B库中,表结构相同或只是增加统一的一些字段, 过滤条件基本类似。
解决方法:
我们把以上内容在解决问题上拆分为二步,
1,从一配制表中读出相应的表名及过滤条件,存于一结果。
2,根据第一步的结果,一条条循环来进行取数插数的过程。
以上过程相当简单,以下为讨论的实现方式。
1,如果是 ORACLE 同字符集,用DBLINK结合着存储过程,写一个通用的程序很容易搞定,只需要建立一个表名及过滤条件的配制表(在此就不多说了)。
2,用ETL工具实现,据我所知,以infa为例,它以字段为对应关系,且它的流程内部循环相当困难,曾经我们有个项目,infa就是硬生生的画了一二百个mapping(的确,不会累死人,但看着相当不爽,当然,欢迎提供好的方案),
在此,我们以kettle为例进行分析,如何解决这个问题(先抛开性能,kettle的确是个好东西)
1),主流程大概是如下这样的
在此,我们再看一下第一组件(得到多表表名)里面内容, 我们再看一下得到表名中的内容
这其中的sql只是模拟一个得到表名的sql,可灵活使用, 这个组件其实就完成了把要抽取的表放入一个结果集中了。
我们再看第二个组件(表迁移)
就是一个取数一个插数的过程。
再看一下它们的内容
在此就完成了,但是,我们主job设置(表迁移)组件时,也就是把前面的内容当后面的参数循环执行。
基本就是如此,另,记得在各主流程及二转换中都设置tt_tab这个参数。
说了这么多,其实很简单。如果你是要做数据库表复制的话,kettle有其它的方式,可以根据工具-》向导-》复制表向导完成。
以上这种适应的是,可实现一些sql的拼接,且要增加减少表时只需求维护配制表了,相对来说会变的简单。。
解决方法:
我们把以上内容在解决问题上拆分为二步,
1,从一配制表中读出相应的表名及过滤条件,存于一结果。
2,根据第一步的结果,一条条循环来进行取数插数的过程。
以上过程相当简单,以下为讨论的实现方式。
1,如果是 ORACLE 同字符集,用DBLINK结合着存储过程,写一个通用的程序很容易搞定,只需要建立一个表名及过滤条件的配制表(在此就不多说了)。
2,用ETL工具实现,据我所知,以infa为例,它以字段为对应关系,且它的流程内部循环相当困难,曾经我们有个项目,infa就是硬生生的画了一二百个mapping(的确,不会累死人,但看着相当不爽,当然,欢迎提供好的方案),
在此,我们以kettle为例进行分析,如何解决这个问题(先抛开性能,kettle的确是个好东西)
1),主流程大概是如下这样的
在此,我们再看一下第一组件(得到多表表名)里面内容, 我们再看一下得到表名中的内容
这其中的sql只是模拟一个得到表名的sql,可灵活使用, 这个组件其实就完成了把要抽取的表放入一个结果集中了。
我们再看第二个组件(表迁移)
就是一个取数一个插数的过程。
再看一下它们的内容
在此就完成了,但是,我们主job设置(表迁移)组件时,也就是把前面的内容当后面的参数循环执行。
基本就是如此,另,记得在各主流程及二转换中都设置tt_tab这个参数。
说了这么多,其实很简单。如果你是要做数据库表复制的话,kettle有其它的方式,可以根据工具-》向导-》复制表向导完成。
以上这种适应的是,可实现一些sql的拼接,且要增加减少表时只需求维护配制表了,相对来说会变的简单。。