kettle利用excel文件增量同步一个库的数据(多表一次增量同步)

news/2024/7/21 6:38:07 标签: excel, sqlserver, mysql, kettle, etl

excel_0">利用excel文件增量同步一个库的数据

现在有sqlservermysql两个库上的表在进行同步,mysql上的是源表,sqlserver上是目标表。

mysql :
在这里插入图片描述在这里插入图片描述在这里插入图片描述


sqlserver :
在这里插入图片描述

可以看到sqlserver上表的最近一次同步日期分别是
pep表: 2022-10-23 14:19:00.000
stu_info表: 2023-01-01 00:00:00.000
xiaohan1表: 2022-10-23 14:19:00.000


excelexcel_19">1. 获取excel需要同步的表名(读取excel文件)

先创建一个excel内容格式如下:
在这里插入图片描述

保存好后,新建一个作业文件命名为"配置文件同步增量数据",在这个作业文件里创建一个转换控件命名为"获取excel里需要同步的表名",用来获取excel里需要同步的表信息在这里插入图片描述
接着创建一个转换文件命名为"1.读取需要同步的表数据",在这个转换文件里创建一个Excel输入控件和一个 复制记录到结果 控件 。excel输入的表格类型选择"Excel 2007 XLSX (Apache POI)"
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
将名为"1.读取需要同步的表数据"的转换文件保存后,回到名为"配置文件同步增量数据"的作业文件里选择名为"获取excel里需要同步的表名"的转换控件的具体路径
在这里插入图片描述


2. 循环处理每个表的增量数据同步

在名为"配置文件同步增量数据"的作业文件里再创建一个作业控件命名为"循环处理每个表增量同步"
在这里插入图片描述
然后我们就需要新建一个作业文件了,因为一个转换控件对应一个转换文件,一个作业控件对应一个作业文件。
这个作业控件我们可以命名为 “2.表数据增量同步”,内容如下4个步骤:
在这里插入图片描述


在2.1获取上一步的表名这个对应的文件里:

在这里插入图片描述

这个从结果获取记录需要我们去之前的excel输入控件里去复制粘贴,
这个设置变量可以直接点获取字段
在这里插入图片描述


在2.2获取上一次同步的时间这个对应的文件里:

---查询目标库上对应表在数据同步记录这张表上的最近一次同步日期
---这里是sqlserver的写法,其他数据库的写法照着改
---之前从excel输入控件里读取后就把记录复制到结果里了,excel的表头就成为了变量
SELECT ISNULL(MAX(TBSJ),'1990-01-01') AS TBSJ FROM SYSTEM_SJTBJL A 
WHERE TABLE_NAME='${TARGET_TABLE_NAME}'

在这里插入图片描述
然后把查出来的每个表的对应的最新同步时间设置为变量。


在2.3同步表数据这个对应的文件里:

有一个表输入和表输出,我们不用更新插入的方式。因为更新插入的方式需要获取具体的表字段写死,每个表都不一样,所以我们使用表输入和表输出来同步。

---表输入:(这是mysql的语法)
---查出源表里更新日期大于目标表的最新一次同步时间的数据
---因为这里查出来的日期是  年/月/日  时:分:秒 的格式 
---所以我这里使用  str_to_date 函数是  '%Y/%m/%d %T'  的格式    而不是  '%Y-%m-%d %T'
SELECT * FROM ${SOURCE_TABLE_NAME} WHERE ${TIME_KEY}>str_to_date(substr('${TBSJ}',1,19),'%Y/%m/%d %T')

在这里插入图片描述
在这里插入图片描述


在2.4记录每次同步的情况到数据同步日志表 这个对应的文件里:

我们更新完了需要马上在SYSTEM_SJTBJL(数据同步记录)这张表里插入对应的表当前同步后的时间,
所以我们只需要用一个执行sql脚本的控件来执行就ok。oracle里insert后是需要commit提交事务才插入成功的。好像sqlservermysql都自动提交事务的

---sqlserver的语法
insert into SYSTEM_SJTBJL values('${SOURCE_TABLE_NAME}',getdate());

在这里插入图片描述


最后

记得检查转换控件和作业控件的文件位置对不对,只有循环处理每个表增量同步这个作业控件要勾选"执行每一个输入行",因为每个表在excel里是一行一行保存读取的,所以这个相当是个循环处理,这也是为什么我们在循环处理每个表增量同步这个作业里写的都是变量来代替表名和字段名的。而获取excel需要同步的表名时不需要勾选,循环处理每个表增量同步这个作业控件对应的作业文件底下的转换控件也不用勾选。

在这里插入图片描述


所有都保存了后

在这里插入图片描述

在这里插入图片描述

我们执行主作业后
在这里插入图片描述
在这里插入图片描述


http://www.niftyadmin.cn/n/62693.html

相关文章

【Spring Cloud】如何使用Feign实现远程调用

本期目录前言1. 导入依赖坐标2. 开启Feign自动装配3. 声明远程调用4. 替代RestTemplate5. 测试前言 本次示例代码的文件结构如下图所示。 1. 导入依赖坐标 在 order-service 的 pom.xml 文件中导入 Feign 的依赖坐标。 <!-- Feign远程调用客户端 --> <dependency&…

The Number Of ThreadPoolExecutor

序言整理下Java 线程池中线程数量如何设置的依据巨人肩膀:https://blog.csdn.net/weilaizhixing007/article/details/125955693https://blog.csdn.net/yuyan_jia/article/details/120298564#:~:text%E4%B8%80%E4%B8%AA%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%A4%84%E7%90%86%E8%AE%A1,…

新来一个卷王,天天加班到2点,太让人崩溃......

在程序员职场上&#xff0c;什么样的人最让人反感呢&#xff1f;是技术不好的人吗&#xff1f;并不是。技术不好的同事&#xff0c;我们可以帮他。是技术太强的人吗&#xff1f;也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。真正让人反感的&a…

【计算机网络期末复习】第三章 数据链路层

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为想复习学校计算机网络课程的同学提供重点大纲&#xff0c;帮助大家渡过期末考~ &#x1f4da;专栏地址&#xff1a; ❤️如果有收获的话&#xff0c;欢迎点…

系统分析师2022年真题答案概念二

数据中台的四个核心能力: 数据汇聚整合能力:随着业务的多元化发展,企业内部往往信息部门和数据中心林立,大量系统、功能和应用重复建设,存在巨大的数据资源和人力资源浪费,同时组织壁垒也导致数据孤岛的出现,使得内外部数据难以被全局规划。数据中台需要能够对数据进行整…

AXI-Lite 学习笔记

AXI-Lite 学习笔记 参考 FPGA&#xff1a;AXI_Lite总线基础2-1]、第二节 AXI总线介绍、ZYNQ PL与PS交互专题_哔哩哔哩_bilibili AXI-Lite总线系列1 - 基础知识_哔哩哔哩_bilibili AXI4 介绍 AXI4 是ARM公司提出的一种片内总线&#xff0c;描述了主从设备之间的数据传输方式。主…

PMP应该如何备考?

备考之初的我们&#xff0c;总会四处搜索PMP备考经验&#xff0c;希望能拿到那些高分通关前辈的备考经验和方法。众所周知PMP考试因为有35个学时培训的基本要求&#xff0c;所以肯定是要通过培训机构报名的。 一&#xff0c;首先我们需要了解到新的考纲 1.PMP模块划分发生变化…

前端基础知识6

谈谈你对语义化标签的理解语义化标签就是具有语义的标签&#xff0c;它可以清晰地向我们展示它的作用和用途。 清晰的代码结构&#xff1a;在页面没有css的情况下&#xff0c;也能够呈现出清晰的代码内容 有利于SEO: 爬虫依赖标签来确定关键字的权重&#xff0c;因此可以和搜索…