kettle小试牛刀

本文介绍了Kettle在数据迁移中的作用,包括全量和增量同步方法,字段格式处理,时间戳策略,以及如何使用SQL脚本进行数据提取、错误日志记录和处理。重点讲解了如何通过Kettle实现MySQL和Oracle数据库之间的数据同步和错误检测。
摘要由CSDN通过智能技术生成

目录

Kettle概述

ETL

Kettle是什么

基本使用

Mysql

作业

作业跳

为什么要用kettle进行同步

单表全量同步

插入/更新

字段格式切换

字符串替换

单表增量同步

作业

开始

转换

同步本次增量数据

记录本次同步时间

测试

错误日志入库

插入/更新

样本行

字段选择

设置变量

SQL脚本

多数据库表融合到一张表

表输入

数据库查询

数据库查询

增加序列(最终表主键)

插入/更新

验证


Kettle概述

ETL

image-20230308170326662

ETL: 把冷热水加到水壶,进行转换,再倒出去(装载)

Kettle是什么

image-20230308170508091

image-20230308171109833

image-20230308171216684

image-20230308171346561

基本使用

连线:按住shift + 鼠标右键

CSV文件:以逗号分隔的文件,为CSV文件

image-20230308173017405

image-20230308173430247

image-20230308173743472

image-20230308173908655

image-20230308174505446

Mysql

首先lib文件夹下要有 mysql 的驱动 webSpoon 需要关闭再重启

image-20230308175115946

image-20230308181720983

image-20230308181857176

作业

作业跳

image-20230309175721665

start指定定时任务,转换传入脚本

image-20230309180940877

为什么要用kettle进行同步

数据迁移的时候,使用Navicat自带的SQL导出,然后到目标数据库执行,这个中间如果有新的业务数据进来,是没有办法进行同步的!

而且这种还比较麻烦

单表全量同步

全量迁移:不常更新的表 代码表,机构表

增量迁移 常更新的表 业务表,用户表

插入/更新

image-20230319104806547

字段格式切换

image-20230319105402712

image-20230319105145246

毫秒更新出问题

image-20230319110300797

image-20230319110138276

字符串替换

可以将源表中的某个值替换成想要的值

image-20230319110927986

image-20230319110954728

image-20230319111109030

image-20230319111018122

单表增量同步

通过时间戳来实现

oracle:  取同步时间最大值,如果同步时间为空,则返回当前日期减去一天
SELECT nvl(MAX(tbsj),SYSDATE - 1) as tbsj FROM t_rz
​
mysql:  取同步时间最大值,如果同步时间为空,则返回当前日期减去一天
SELECT IFNULL(MAX(tbsj), DATE_SUB(CURDATE(), INTERVAL 1 DAY)) FROM t_rz;

作业

image-20230319170231387

开始

新建一个作业,没有转换,再去新建转换

image-20230319123242173

转换

这里运行后 同步时间 是微秒级别,需要去掉后面的 9个0

image-20230319120736428

image-20230319120745756

image-20230319124611583

同步本次增量数据

oracle: 获取大于指定日期的数据
SELECT * FROM t_user  WHERE gxsj > to_date('2020-9-1 20:15:48','yyyy-mm-dd HH24:MI:SS')
mysql:  获取大于指定日期的数据
SELECT * FROM t_user WHERE gxsj > '2023-03-18 20:15:48';
​
SELECT * FROM t_user WHERE gxsj >  SUBSTR('2023-03-18 20:15:48.000000000',1,19);

image-20230319125631864

注意:上面忘了勾选 替换SQL语句里面的变量, 记得勾选上!

image-20230319125645128

记录本次同步时间

oracle: 向同步日志插入系统当前时间
insert into t_rz valuse(seq_t_rz.nextval,'T_USER','1',sysdate);
commit;
​
mysql
INSERT INTO t_rz(BM,RESULT,TBSJ) VALUES('T_USER','1',SYSDATE())

image-20230319165643106

测试

image-20230319171107273

第一次同步

image-20230319171132364

kettle表中大于TBSJ的数据过来

image-20230319171118741

第二次同步

image-20230319171223091

kettle表中大于TBSJ的数据过来

image-20230319171247703

错误日志入库

造错误数据,将 t_user 中的sex数据,从 char(1) 改成 char(2) 这样同步到 t_user_kettle 中就会有错误

image-20230319172659371

image-20230319172914560

oracle
alter table t_rz add err_desc varchar2(4000);
mysql
ALTER TABLE t_rz ADD COLUMN err_desc VARCHAR(4000);

插入/更新

右键,选择 错误处理

image-20230319173537081

样本行

选择错误处理 步骤

image-20230319173501272

字段选择

image-20230319180351875

设置变量

image-20230319180414927

image-20230319180434957

SQL脚本

image-20230319180453581

多数据库表融合到一张表

image-20230319195009298

表输入

image-20230319192430529

image-20230319192551314

数据库查询

image-20230319192526588

数据库查询

image-20230319192649873

image-20230319192822885

增加序列(最终表主键)

image-20230319193201052

插入/更新

image-20230319194718175

验证

image-20230319194754150

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值