单表(多表需手动创建多个转换)插入,更新数据

准备条件:源数据库表,目标表,两个数据库表结构一致,目标表后期可能会加字段(一开始我以为加字段会有问题,本篇中测得结果目标表添加字段也没事,对数据结果无影响,不报错)。

需求:添加新数据,更新旧数据

即将源数据库表数据定期推送到目标表,源数据库表新增的数据加到目标表中,源数据库表的旧数据如果有字段更新了,更新过的数据也更新到目标表里。

如果表结构完全一致,可以用上一篇中的多表批量同步数据实现+裁剪表实现需求,但是目标表后期可能会新加字段,就不能用这个方法了。

因为裁剪表,会把目标表里的数据都先truncate,也就是删除了,然后再重新导入。这样是不合理的。

有以下几点不合理之处:

1.第一,目标表后期可能会加字段,比源数据库表多字段,而且新加的字段会有数据,更新时如果给删了,重新导入,而源数据表中又没有此字段,不行。

2.第二,删除了以后再重新导入,数据量一多的话,几十万条的话,效率不行。

而上一篇中的多表批量同步数据实现+忽略插入错误,不满足需求。(勾选忽略插入错误是因为,如果做循环定时,默认走一遍流程可以,第二遍会报错,id重复违反唯一规则)。

因为上一篇中那个数据同步+忽略插入错误时是根据id比较,如果id相同,数据就不处理,不转移到目标表。

只会增加新的id数据,也就是说只能添加新数据,并不能更新以前的数据。

而本篇中,如果id相同,会自动查看数据是否改变,如果改变就更新。如果id不同,表示新的数据,就新增。

转换界面:

 作业界面:

1.创建转换

文件创建转换。

2.创建表输入,表输出。

直接进行连线,直接连线的原因是后续操作中会涉及到,如果不连,有些字段无法获取。

鼠标悬浮在"插入,更新"上面,点击红色箭头,进行连线。

如下图,这样就可以了。

 

3.表输入设置

步骤名称输入表名,为了在界面直接区分哪些表。

SQL输入查询该表的语句,切记不能加分号。

数据库连接选择新建。连接名称由于不能复制粘贴,所以建议用数字比较简单,但是连接名称不能重复,注意。

主机名称填写源数据库ip地址,数据库名称填写orcl,端口号1521,用户名,密码就是数据库的用户和密码。填写完成后,点击测试,连接成功或失败会有提示。成功后点击确定。

4.表输出设置

步骤名称默认。

数据库连接选择新建。这一步骤同3表输入设置的一样,其中连接名称改为13-1不要和表输入的一样,不能重复。主机名称,用户名,密码填写目标表的信息。

目标模式不用写。

目标表点击浏览选择对应的目标表。

用来查询的关键字,表字段下拉选择ID主键,比较符下拉选择 “=”,流里的字段1下拉选择ID主键。这里的表字段是目标表的字段,目标表不选择,则无法下拉。流里的字段1是指源数据库表的字段,如果最开始创建表输入与表输出之时不连线,则流字段无法下拉。

更新字段直接点击右侧,获取和更新字段。注意红圈处主键填写N,代表不更新,Y则代表更新。

全部填写后,选择确定。

 5.保存转换文件

CTRL+S保存转换文件,多表时建议改动以后及时保存。

 6.定时任务,创建作业

单次执行,可直接在转换中左上角执行。如果需多次或定时执行,创建一个作业即可。

左上角文件创建作业。

点击通用,选择START与转换。

点击转换,选择之前保存的转换文件。

进行连线。

点击START选择定时时间。

原文地址:https://www.cnblogs.com/wanlige/p/13162451.html