目录
Kettle概述
ETL
ETL: 把冷热水加到水壶,进行转换,再倒出去(装载)
Kettle是什么
基本使用
连线:按住shift + 鼠标右键
CSV文件:以逗号分隔的文件,为CSV文件
Mysql
首先lib文件夹下要有 mysql 的驱动 webSpoon 需要关闭再重启
作业
作业跳
start指定定时任务,转换传入脚本
为什么要用kettle进行同步
数据迁移的时候,使用Navicat自带的SQL导出,然后到目标数据库执行,这个中间如果有新的业务数据进来,是没有办法进行同步的!
而且这种还比较麻烦
单表全量同步
全量迁移:不常更新的表 代码表,机构表
增量迁移 常更新的表 业务表,用户表
插入/更新
字段格式切换
毫秒更新出问题
字符串替换
可以将源表中的某个值替换成想要的值
单表增量同步
通过时间戳来实现
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;
作业
开始
新建一个作业,没有转换,再去新建转换
转换
这里运行后 同步时间 是微秒级别,需要去掉后面的 9个0
同步本次增量数据
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);
注意:上面忘了勾选 替换SQL语句里面的变量, 记得勾选上!
记录本次同步时间
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())
测试
第一次同步
kettle表中大于TBSJ的数据过来
第二次同步
kettle表中大于TBSJ的数据过来
错误日志入库
造错误数据,将 t_user 中的sex数据,从 char(1) 改成 char(2) 这样同步到 t_user_kettle 中就会有错误
oracle alter table t_rz add err_desc varchar2(4000); mysql ALTER TABLE t_rz ADD COLUMN err_desc VARCHAR(4000);
插入/更新
右键,选择 错误处理
样本行
选择错误处理 步骤