这个实验主要思想是在创建数据库表的时候,

通过增加一个额外的字段,也就是时间戳字段,

例如在同步表 tt1 和表 tt2 的时候,

通过检查那个表是最新更新的,那个表就作为新表,而另外的表最为旧表被新表中的数据进行更新。

实验数据如下:

mysql database 5.1

test.tt1( id int primary key , name varchar(50) );

mysql.tt2( id int primary key, name varchar(50) );

快照表,可以将其存放在test数据库中,

同样可以为了简便,可以将其创建为temporary 表类型。

数据如图 kettle-1

kettle-1

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

主流程如图 kettle-2

kettle-2

在prepare中,向 tt1,tt2 表中增加 时间戳字段,

由于tt1,tt2所在的数据库是不同的,所以分别创建两个数据库的连接。

prepare

kettle-3

在执行这个job之后,就会在数据库查询的时候看到下面的字段:

kettle-4

然后, 我们来对tt1表做一个 insert 操作 一个update操作吧~

kettle-5

在原表上无论是insert操作还是update操作,对应的updateTime都会发生变更。

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

下面只要是对应main_thread的截图:

kettle-6

在这里介绍一下Main的层次:

Main

START

Main.prepare

Main.main_thread

{

START

main_thread.create_tempTable

main_thread.insert_tempTable

main_thread.tt1_tt2_syn

SUCCESS

}

Main.finish

SUCCESS

在main_thread中的过程是这样的:

作为一个局部的整体,使它每隔200s内进行一次循环,

这样的话,如果在其中有指定的表 tt1 或是 tt2 对应被更新或是插入的话,

该表中的updateTime字段就会被捕捉到,并且进行同步。

如果没有更新出现,则会走switch的 default 路线对应的是write to log.

继续循环。

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

然后,通过一个transformation来判断那个表的updateTime值最新,

来选择对应是 tt1表来更新 tt2 还是 tt2 表来更新 tt1 表;

main_thread.create_tempTable.JOB:

main_thread.insert_tempTable.Job:

PS: 对于第二个SQL 应该改成(不修改会出错的)

set @var1 = ( select MAX(updatetime) from tt2);

insert into test.temp values ( 2 , @var1 ) ;

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

但是我们把快照表和tt1 表都存到了test(数据库实例名称)里面。

在上面这个图中对应的语句是想实现,在temp表中插入两行记录元组。

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

id 为2的元组对应的 temp.lastTime 字段 是 从 tt2 表中选出的 updateTime 值为最新的 字段。

当然 , id 是用来给后续 switch 操作提供参考的,用于标示最新 updateTime 是来自 tt1 还是 tt2,

同样也可以使用 tableName varchar(50) 这种字段 来存放 最新updateTime 对应的 数据库.数据表的名称也可以的。

main_thread.tt1_tt2_syn.Transformation:

首先,创建连接 test 数据库的 temp 表的连接,

选择 temp表中 对应 lastTime 值最新的所在的记录

所对应的 id 号码。

首先将temp中 lastTime 字段进行 降序排列,

然后选择id , 并且将选择记录仅限定成一行。

然后根据id的值进行 switch选择。

在这里LZ很想使用,SQL Executor,

但是它无法返回对应的id值。

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

并被switch接收到。

下图是对应 switch id = 1 的时候:即 tt1 更新 tt2

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

和Insert/Update 中的Target table的选择

下图是对应 switch id = 2 的时候:即 tt2 更新 tt1

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

和Insert/Update 中的Target table的选择

但是考虑到增加一个 column 会浪费很多的空间,

所以咋最终结束同步之后使用 finish操作步骤来将该 updateTime这个字段进行删除操作即可。

这个与Main中的prepare的操作是相对应的。

Main.finish

这样的话,实验环境已经搭建好了,

接下来进行,实验的数据测试了,写到下一个博客中。

当然,触发器也是一种同步的好方法,写到后续博客中吧~

时间戳的方式相比于触发器,较为简单并且通用,

但是 数据库表中的时间戳字段,很费空间,并且无法对应删除操作,

也就是说 表中删除一行记录, 该表应该作为新表来更新其余表,但是由于记录删除 时间戳无所依附所以无法记录到。

Android中API建议的方式实现SQLite数据库的增、删、改、查的操作

package com.examp.use_SQLite.dao; import java.util.ArrayList; import java.util.List; import android. ...

.NET、PHP、MySql、JS中的时间戳你每次是手写还是复制?这篇文章让你一次性搞懂

什么是时间戳(chuō)? 答:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 为什么时间戳要从1970年01月0 ...

js中Date与timestamp(时间戳)的相互转换

#时间(Date)转时间戳(Timestamp): 1.var timestamp1 = (new Date()).valueOf(); // 结果:1535374762785,通过valueOf() ...

[.NET][C#] C#中的时间戳

Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年1月1日0时0分0秒( ...

Azure Service Bus 中的身份验证方式 Shared Access Signature

var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

kettle中调用java类

kettle中调用java类 有时须要在kettle调用java类,如:验证.查询或自己定义加密等.有时甚至连主要的数据訪问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应 ...

Python读取PE文件(exe/dll)中的时间戳

kettle设置mysql时区_kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步操作(一)...相关推荐

  1. kettle获取当前日期_kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步操作(一)...

    这个实验主要思想是在创建数据库表的时候, 通过增加一个额外的字段,也就是时间戳字段, 例如在同步表 tt1 和表 tt2 的时候, 通过检查那个表是最新更新的,那个表就作为新表,而另外的表最为旧表被新 ...

  2. kettle中通过 时间戳(timestamp)方式 来实现数据库的增量同步操作(一)

    这个实验主要思想是在创建数据库表的时候, 通过增加一个额外的字段,也就是时间戳字段, 例如在同步表 tt1 和表 tt2 的时候, 通过检查那个表是最新更新的,那个表就作为新表,而另外的表最为旧表被新 ...

  3. mysql 时区设定_如何设置MySQL 时区

    MySQL 时区默认是服务器的时区.在使用中经常会遇见. 可以通过以下命令查看 查看时区 SQL代码. mysql> show variables like '%time_zone%'; . + ...

  4. docker设置mysql时区

    永久设置时区 进入docker容器 $ docker exec -it 容器ID 或 name bash 输入 $ date 结果: Sun Jan 23 04:59:46 UTC 2022 设置my ...

  5. python环绕文字_Java 设置 Word 文档中图片文字环绕方式

    Java 设置 Word 文档中图片文字环绕方式 在Word文档中插入图片时,选择合理的图片文字环绕方式可以使图片的展示效果更好,也能使页面的排版更加美观.本文就将介绍如何使用Free Spire.D ...

  6. java代码中设置mysql时区_关于Java中的mysql时区问题详解

    前言 话说工作十多年,mysql 还真没用几年.起初是外企银行,无法直接接触到 DB:后来一直从事架构方面,也多是解决问题为主. 这次搭建海外机房,围绕时区大家做了一番讨论.不说最终的结果是什么,期间 ...

  7. kettle 分析mysql日志_Kettle实战100篇 第20篇 MySQL数据库导出到ElasticSearch

    业务需求:在系统上线后,原系统的日志信息是存储到MySQL数据库中,但是随着日志数据越来越大,导致数据查询缓慢,加上日志数据并非业务系统关键数据,因此,系统考虑改版升级,使用ElasticSearch ...

  8. php中date设置北京时区,PHP中设置时区方法小结

    PHP代码中的时间判断语句出了点问题,问题出在PHP的时区设置上,PHP所取的时间默认是格林威治标准时间,所以和北京时间相差8小时.找到原因后,在网上搜索到了一些关于PHP的时区设置方法:1.修改ph ...

  9. MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?...

    最近无意间看到一个 MySQL 分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案.因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的 ...

  10. MySQL 分页优化中的 “ INNER JOIN方式优化分页算法 ” 到底在什么情况下会生效?

    最近无意间看到一个 MySQL 分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案.因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的 ...

最新文章

  1. C#文件封装到Dll
  2. WSDL中文版——详解
  3. 继承 WebMvcConfigurationSupport类后无法访问Swagger页面问题
  4. WebRTC 音频发送和接收处理过程
  5. Java 基础面试题,java基础面试笔试题
  6. 链表头结点存在的意义
  7. Codeforces Round #315 (Div. 1) A. Primes or Palindromes? 暴力
  8. linux 3.10的kdump配置的小坑
  9. 用友U8.72 审核成品入库单时生成销售出库单 SQL触发器  --白波九道
  10. linux shell 编程之变量总结
  11. md5加解密工具 java_MD5解密加密工具类
  12. 使用EasyExcel的模板导出复杂表头的Excel- 先单组数据填充,再多组数据填充
  13. 万年历黄历星座查询v3.6.7
  14. mysql实验训练2 数据查询操作_实验训练2:数据查询操作
  15. 怒了!!!专科怎么了?搞学历歧视?专科这样做,照样牛掰!
  16. linux的系统监视器图片_替代Windows还有多远?国产统一操作系统UOS上手体验
  17. [转]国外人气最旺的软件测试网站
  18. Xilinx ip核之FIFO和RAM
  19. Tomcat原理和源码分析
  20. 怎么自学Tekla智能节点中参数的含义——学会获取官方资料才是王道

热门文章

  1. 第二周:神经网络的编程基础(Basics of Neural Network programming)
  2. Tableau 第五章 创建仪表板和故事
  3. 怎么样用计算机打字,如何使用电脑键盘练习打字【拼音打字】
  4. jQuery键盘打字练习效果
  5. 电子密码锁程序C语言,基于C语言STC89C52单片机电子密码锁的设计与仿真
  6. 【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群
  7. 用户坐标系和工具坐标系校准原理
  8. springboot+宿舍管理小程序 毕业设计-附源码171008
  9. Win7怎么进入注册表(regedit)
  10. 女生学计算机专业用考研吗,计算机专业女生考研,该选什么方向比较好?谢谢!...