使用kettle工具读取Access数据库,笔者只是记录自己的方案,有更好的方式欢迎评论交流
1.新建转换
2.普通方案
可实现如下转换配置,插入数据,在第三节介绍如何优化管道
2.1Access输入
- 配置Access文件路径
- 字段:点击获取字段,并更新相应内容
也可点击预览数据
2.2新增字段
可根据需求是否需要该组件
2.3过滤记录
2.4插入/更新
配置如下图,这里是以目标数据库为pgsql为例,图中的不执行任何更新,勾选了则不会更新历史数据。
3.优化方案(提速)
如下方案,由于Access输入组件的限值,没有指定读取的行数,故增加表输入和Multiway merge join两个组件,在过滤条件中过滤大于表输入查询的最大id。在转换中比对数据,而非到目标数据库组件比对插入或者更新(非常地影响转换效率)
3.1表输入
这里重命名表查询组件→查询最大id,组件配置如下,注意:sql语句引入临时id字段t_id用于join组件(值取得1,可任意取,只要值和后边得新增字段组件一直就行)
3.2增加常量组件新增t_id![](https://img-blog.csdnimg.cn/946aecd24042433e980d97a4ec876562.png)
3.3Multiway merge join
3.4过滤记录
3.5其它组件
配置和普通方案一致
4.对比
两种方案的运行时效对比
4.1优化后的方案
由于数据库本身不需要更新,不到3秒就运行完了
4.2普通方案
虽然数据库本身不需要更新,但是所有数据量都需要放到目标数据库比对,非常慢,运行了18分钟还只处理了三千多条。