Kettle同步MongoDB数据到Oracle中(含全量和增量方式)

使用Kettle同步MongoDB数据到关系型数据库

最近工作时,要同步一个业务系统的数据到Oracle数据库。给账号信息过来的时候,布豪,是非关系型数据库MongoDB。MongoDB是Json文档型的数据库,与传统的关系型数据库到关系型数据库同步方式不同,本文将讲解如何处理上述业务场景。

流程和组件介绍

整体流程也容易理解

数据库连接与数据接入
Json解析
数据存储

这边主要介绍2个不常用的组件

① MongoDB input:里面可以配置MongoDB数据连接、读取的库和文档以及查询条件和筛选字段。
在这里插入图片描述
Configure connection中配置数据库信息;Input Option主要是选择你要读哪个库,哪个文档的信息;Query中配置你的查询过滤条件,你也可以做聚合管道操作,完成一些复杂查询或者排序啥的;Fields中可以选你只看哪些字段信息。

② Json input:通过此组件将输入的Json字符串解析出来,解析字段过程如下:
在这里插入图片描述
第一层的就是$.字段,如果是包了一层的,就可以像riskLevel一样点多一层,也可以用在线Json路径解析工具去解析。

全量同步

基本按照上面的组件和流程介绍内容,按照下面的组件流把数据同步到目标表即可。
在这里插入图片描述
注意表输出中裁剪表要勾选上,字段对应好即可。
在这里插入图片描述

增量同步

增量同步数据时,我们要确定同步时间范围,即增量时间;先在DB中删除在这个时间后的数据,然后将时间作为参数值传入到MongoDB input的Query块中,筛选出符合条件的数据,同步到数据库表中。流程图如下:

获取增量时间
删除DB增量时间后的数据
获取增量时间后的数据
解析和存储

上面流程比全量同步多2个步骤

在这里插入图片描述
注意:这是一个JOB(作业),我将上面的四个步骤拆到2个转换中。
有同学可能会好奇为什么要这样处理?放在一个转换中不是更好吗?

这里有一个隐藏的坑,如果将设置变量放在一个转换里,这个设置变量会不起作用。参考博客

下面贴一下详细过程
设置变量:
在这里插入图片描述
这里定义好参数名称

getTime转换中,获取最近时间戳,然后将获取的值设置回变量中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

getData转换中,主要是获取参数值、删除DB数据(此脚本中未添加)、获取数据、解析和存储。流程图和详细过程如下:
在这里插入图片描述
在这里插入图片描述
MongoDB input组件其它设置如上,需要在Query选项卡中设置参数过滤条件(如上表示为:只获取K_C时间戳后面的数据)。

Json input组件设置类比上文设置,此处无需修改。

表输出时,不要勾选裁剪表。

注意:上面脚本中没有先删除数据,规范做法是删数后增数,这样才能避免数据的重复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Astronaut_001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值