admin

通过kettle完成增量更新
前言:在上大学的时候,学习了全量更新和增量更新的概念,但因为大学练习的项目小,数据库均使用的全量更新,对增量更新一...
扫描右侧二维码阅读全文
15
2017/11

通过kettle完成增量更新

前言:在上大学的时候,学习了全量更新和增量更新的概念,但因为大学练习的项目小,数据库均使用的全量更新,对增量更新一直只有理解没有实践,现在到了工作中,终于有实际的项目让我能运用起来。增量更新一般用于数据推送以及每日的备份,不需要花大量的时间读取数据库,下面就介绍我的应用场景。

我所要完成的工作是进行数据的推送,将公司的数据推送到客户的数据库中,在这里面涉及三个数据库:

  1. 业务库 Oracle (公司正在运营的应用数据库)
  2. 服务库 Sql Server(同样是公司的数据库,在这里完成一些数据库加密修改等逻辑操作)
  3. 前置库 Oracle(客户所提供的数据库,最终会将数据推送至这里)

业务需求

该增量更新不一定是一个定时任务,可能是几小时内完成一次更新,也可能是几天之内需要更新一次,所以,我们不光要有数据的更新时间,还要有最后一次数据采集时间,当我们在执行更新时,数据的更新时间最后一次数据采集时间现在 的,就是我们需要采集的数据。

关键字介绍

  • 初始化

在做增量更新之前,需要将服务库和前置库做一次初始化,使这两个库与业务库的数据保持一致。

  • 数据库字段介绍

HC_ID :服务库与前置库主键ID
ORI_ID : 业务库主键ID
SYS_U_T : 数据更新时间
HC_UPDATETIME :数据最后采集时间

  • 软删除

业务库采用的是软删除技术,既不需要某条记录时不会将该行记录删除掉,而是在某个字段标识它为无效。所以本实践不必考虑如何判断记录是否已删除,而是将删除归为数据的 UPDATE 操作。


流程图如下

1.png


在这里面,最重要的既是 插入/更新 这个操作,这是kettle提供的一个图元,将输入的数据,根据字段条件,与表中的数据进行对比,如果是字段有更新的,则进行更新操作,如果表中没有该行记录的,则进行插入操作。

2.png

比如在本次实践中,我们从业务库中取出了300条数据,而服务库中27W条数据,通过这300条数据的ORI_ID 与 服务库的ORI_ID 关联。

3.png

假设这其中有280条数据是新增的,20条数据是信息变更或软删除的,那么在执行此kettle转换后,会在下方步骤度量中看到输出280条,更新20条

Last modification:November 16th, 2017 at 02:36 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment