本次例子主要介绍关于如何读取mysql数据存到oracle的完整例子。关于kettle的入门使用有兴趣的可以看我的上一篇文章https://blog.csdn.net/weixin_40496191/article/details/105599434
一、表介绍
本次例子主要涉及到四张表,分别是
oracle临时表:r_temp_value;
oracle历史数据表:r_sample_value;
oracle实时表:r_stock_value;
oracle电站表:r_hydrepower;
mysql的数据表:r_sample_value;
二. 逻辑介绍
- 开始
- 清空临时表
- 设置当前时间变量(供后面存储更新信息log使用,这里暂时没用到,只做介绍)
- 开始同步mysql数据到oracle的临时表
4.1. 取历史数据表的最大时间
4.2. 根据最大时间从mysql表取出数据
4.3. 将取出的数据传到临时表 - 根据临时表将数据同步到历史数据表和实时表
5.1. 取历史数据表的最大时间
5.2. 根据最大时间从临时表取出数据
5.3. 将数据插入历史数据表
5.4. 将记录通过sql实现插入/更新到实时表stock - 成功
三、设置步骤并且进行操作
- 首先根据大流程先建立一个作业,然后设置主要步骤
如上图所示,我们加入一个开始和一个结束按钮,中间连接一个sql脚本和两个转换 - 开始设置start
一般间隔时间不宜设置太短,因为我后面会根据历史记录表的最新时间批量获取,如果间隔时间太短,会导致mysql数据某个时间段还未上传结束,就开始mysql到oracle的转换,导师数据的缺失。 - 删除临时表
- 设置时间变量(也可以忽略不设置,因为本次例子未用到)
4.1新建转换
4.2获取当前时间
4.3设置时间变量
4.4将新建的转换应用到步骤“设置时间步骤2”中 - 同步到临时表
5.1新建转换
5.2获取历史数据表最大时间
5.3根据最大时间从mysql获取数据
这里可以直接把之前获取的最大时间拿来用,只需要在“从步骤插入数据”引入上一步即可!!!
5.4设置临时表的主键序列
这里是为了将数据插入到临时表时有个主键id,所以这里设置了一个序列,当然,也可以不用设置。但是要注意,这里设置的序列需要是数据库存在的序列,否则会报错!!!
5.5将数据同步到临时表
5.6将新建的转换应用到步骤“同步到临时表2”中 - 同步到历史数据表和实时表
6.1新建转换
6.2获取历史数据表最大时间
6.3根据时间取临时表的数据
6.4增加序列
6.5存数据到历史数据表
6.6从临时表读取最新数据存到实时表
这里我用了关联表存储数据。不是特殊需求,只是想要表明可以通过这种方式,读取的时候关联其他表字段进行存储。
6.7 将新建的转换应用到步骤“同步到正式表和实时表2”中 - 引入成功步骤
四、结果
- mysql的r_sample_value表
- oracle的r_hydrepower表
- oracle的r_temp_value表
因为每次执行步骤都要删除临时表数据,当最新一次执行,没有mysql最新数据传上来时,临时表即为空。 - oracle的r_sample_value表
- oracle的r_stock_value表
有最新mn号的数据传上来,说明有新的水电站,则插入,否则直接覆盖最新数据