Kettle:数据同步

1. 数据同步

首先,需要说明的是【数据同步】操作只能用在【合并记录】操作之后。前面说过,【合并记录】操作会生成一个新的字段flagfield,其根据数据的来源及变化情况,对每条记录进行标记。具体【合并记录】的用法,可参考https://blog.csdn.net/yeshang_lady/article/details/107924036 。这里仍然使用上述博客中的数据,对【数据同步】的作用进行说明。

创建如下转换,【csv文件输入】、【csv文件输入2】及【合并记录】等的配置信息与上述博客中的相同,不在赘述。

 下面对【数据同步】进行配置。先看【一般】选项框,具体如下:

这一部分跟【插入/更新】类似,这里不再赘述。这里需要说明一点,目标表的表结构不需要与数据流(即【合并记录】中的表结构)相同。

下面来看【高级】选项卡。

操作字段名就是【合并记录】步骤生成的标记字段名(操作字段名这里是必填项,如果不填写的话,会报错It was not possible to find operation field [null] in the input stream!)。接下来三个框里只有填“identical”、‘changed’,‘new’,'deleted'时才能发挥作用。下面具体来说;

  • 当值相等时插入:在本例中,将数据流中flagfield=new的记录插入到目标表中。
  • 当值相等时更新:在本例中,使用数据流中flagfield=changed的记录对目标表中的数据进行更新。这项操作的前提是目标表中存在与flagfield=changed对应的相等记录。判断两个记录是否相等,依据【一般】选项卡中【用来查询的关键字】中设置的判断条件。即使更新,也只会对【一般】选项卡中【更新字段】指定的字段进行更新。
  • 当值相等时删除:在本例中,将数据流中flagfield=deleted记录从目标表中删除。
  • 执行查询:当执行更新和删除操作时,会比较数据流的每条记录是否已经在目标表中,如果没有出现,则抛出异常。(资料上是这么说的,但是当我只设定当值相等时插入时并勾选执行查询时,也有可能抛出异常)

2. 实验过程

在mysql中创建目标表test_0819,其创建语句如下:

create table `test_0819` (
	`id` int (11),
	`salesArea` varchar (765),
	`brand` varchar (765),
	`model` varchar (765),
	`unitPrice` int (11),
	`number` int (11)
); 

当采用如下设置时:

 此时test_0819表中的数据如下:

 将test_0819表中的数据清空,将1_a.csv文件中的数据传到test_0819表中,具体代码如下:

--csv文件要放到特定的目录下,并把编码方式改成utf-8

truncate table test_0819;

load data infile '1_a.csv' into table test_0819 fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n' ignore 1 lines;

此时,test_0819中的数据如下:

更改【数据同步】的配置如下,并重新运行转换。

 运行后,test_0819表中的数据如下:

可以看到,id从1到6的数据被删除,而id为7和8中的数据已经更新了。 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值