mysql时间戳增量提取_kettle中通过 时间戳timestamp)方式 来实现数据库的增量同步操作一)...

bc3f9276acf88283a0569b9b9ef9ee92.png

在线QQ客服:1922638

专业的SQL Server、MySQL数据库同步软件

此实验的主要思想是在创建数据库表时

通过添加一个附加字段(即时间戳字段)

例如,当同步表tt1和表tt2时,

通过检查该表是否为最新更新,将该表用作新表,另一个表为由新表中的数据更新的最旧表。

实验数据如下:

mysql数据库5.1

test.tt1(id int主键,名称varchar(50));

mysql.tt2(id int主键,名称varchar(50));

快照表,可以将其存储在测试数据库中,

另外,为简单起见,您可以将其创建为临时表类型。

数据显示在水壶1中

97412fa3031637a84e89fbd05b0d4599.png

水壶1

================================================ ==== ============

主要过程显示在水壶2中

2fce01e3b6bec6d1015b45c2746a921c.png

\水壶2

在准备中,将时间戳字段添加到tt1和tt2表中,

由于tt1和tt2所在的数据库不同,因此请在两个数据库之间创建连接。

准备

5eae0d9728392107482f0527a4baceea.png

水壶3

\执行此作业后,查询数据库时将看到以下字段:

\

793e118710ec8f25a5021d606ec71e7b.png

水壶4

然后,让我们在tt1表上执行插入操作和更新操作

2b4eb9fd8545301c5ea7e7ab3d964c07.png

水壶5

无论是对原始表的插入操作还是更新操作,相应的updateTime都会更改。

如果tt1表和tt2表中的updateTime字段是最新时间,则表示该表是新表。

以下是与main_thread对应的屏幕截图:

5367e05f1ca836887a34f4597ef10ca0.png

水壶6

在这里介绍Main的级别:

主要

开始

Main.prepare

Main.main_thread

{

开始

main_thread.create_tempTable

main_thread.insert_tempTable

main_thread.tt1_tt2_syn

成功

}

Main.finish

成功

main_thread中的过程如下:

作为一个整体,使它每200s循环一次,

在这种情况下,如果存在与更新或插入对应的指定表tt1或tt2,

该表中的updateTime字段将被捕获并同步。

如果没有更新,则交换机的默认路由将对应于写入日志。

继续循环。

首先创建一个快照表,然后将tt1和tt2表中的最大(最新)时间戳值插入快照表中。

然后,通过转换来确定该表的最新updateTime值,

选择是否更新与tt1表对应的tt2或tt2表;

main_thread.create_tempTable.JOB:

666c826e900638a468bb0a4034ed4ab5.png

main_thread.insert_tempTable.Job:

1147ac84fb583617eac5a560b1553516.png

PS:对于第二个SQL,应该对其进行更改(如果不对其进行修改,那将是错误的)

set @ var1 =(从tt2中选择MAX(更新时间));

插入test.temp值(2,@ var1);

因为conn对应于连接到mysql(数据库实例名称),

但是我们将快照表和tt1表都保存在测试中(数据库实例名称)。

上图中的相应语句是要实现的,在temp表中插入两行记录元组。

与id为1的元组相对应的temp.lastTime字段是从tt1表中选择的最新updateTime值,

与id为2的元组相对应的temp.lastTime字段是最新字段,其最新时间是从tt2表中选择的。

当然,id用作后续开关操作的参考,并用于指示最新的updateTime来自tt1还是tt2,

您还可以使用tableName varchar(50)字段来存储与最新updateTime相对应的数据库。数据表的名称也是可以接受的。

main_thread.tt1_tt2_syn.Transformation:

8921833c737c542ed522cd789cf8dcc2.png

首先,创建与测试数据库的临时表的连接,

在临时表中选择具有最新lastTime值的记录

相应的ID号。

首先以降序对temp中的lastTime字段进行排序,

然后选择id并将选择记录限制为仅一行。

8de66430c0876022923bfd5040d5a149.png

然后根据id的值选择开关。

LZ想要在这里使用它,SQL Executor,

但是它不能返回相应的id值。

但是表输入可以返回相应的id值,

并由开关接收。

f912806f5f2036f86ee591e891156027.png

下图对应于开关id = 1:tt1更新tt2

注意选择比较合并行的新数据源和旧数据源

在”插入/更新”中选择目标表

1a11367b8a0edd165fd42c4f831a1cc7.png

下图是开关id = 2时的情况:tt2更新tt1

注意选择比较合并行的新数据源和旧数据源

在”插入/更新”中选择目标表。

af7044d3b8e32609736d8ffe1bb2c378.png

但是考虑到添加一列会浪费很多空间,

因此,完成同步后,请使用完成操作步骤删除updateTime字段。

这对应于Main中的准备操作。

Main.finish

4025dd81b27e15a4eeef6fe77bd0a35c.png

在这种情况下,已经建立了实验环境,

接下来,对实验数据进行测试并将其写入下一个博客。

\当然,触发器也是同步的好方法,将其写在后续博客中

与触发器相比,时间戳方法更简单,更通用,

但是,数据库表中的timestamp字段非常占用空间,无法删除,

即删除表中的一行记录,该表应用作新表来更新表的其余部分,但是由于记录删除时间戳没有依赖性,因此无法记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值