1
全量更新:
准备数据:在MySQL中创建两个数据库——kettle,kettle_test,kettle中tableA源表,kettle_test中tableB目标表
表输入:
按num升序排序:
插入更新:
效果:kettle转换执行成功,将源表的数据全部插入到目标表中。
增量更新:前两步配置,表输入和排序和全量更新一样
两个表的输入配置:来自不同的数据库
合并排序:选择左外链接
过滤记录条件:false什么也不做,true就下一步---复制记录到结果
再经过一次排序之后,选择插入/更新控件,插入到目标表:
在源表中增加一条数据,目标表不变
效果:
将执行日志输出并保存到数据库中:
空白处右键点击:
设置完成之后,运行一次转换就能看到日志表中的有数据
效果:
从日志表中抽取数据到elt_log
在转换中设置一个延迟,方便观察,运行几次生成数据
观察日志表,enddate转换开始的时间,logdate是转换结束的时间
准备sql语句,预览数据时发现bug:执行时长,没有按照规定的格式显示
SELECT transname as 转换名称,
date_format(enddate,'%Y-%m-%d') as 执行日期,
timediff(logdate,enddate) as 执行时长
FROM log
where logdate=(select max(logdate) from log group by date_format(enddate,'%Y-%m-%d'))
group by date_format(enddate,'%Y-%m-%d');
navicat截图正确格式:
添加控件,字段选择,将执行日期转化成正 确的格式
etl_log表输出
效果,19秒为最新的一次转化执行时间:
新增两个字段记录转换前后的行数---未完成写思路
在ktr异常时将本次执行日志发送到指定邮箱:
新建作业:
添加转换:
配置邮箱:
效果:
2
建表
在转换中执行sql脚本,判断当前时间不在3:00~12:00之间
update erp set 抽取时间='2022-07-18'
where date_format(批处理时间,'%H') not between 3 and 12
and DATE_FORMAT(批处理时间,'%Y-%m-%d')=DATE_FORMAT(now(),'%Y-%m-%d')
;
效果:
3
新建转换:
获取变量:
表输入配置:
新建作业:
设置两个变量:
判断年份是否在范围内:
执行JS脚本,实现年月累加:
var year=new Number(parent_job.getVariable("year"));
var month=new Number(parent_job.getVariable("month"));
if(month>12){
parent_job.setVariable("month",1);
parent_job.setVariable("year",year+1);
true;
}else {
parent_job.setVariable("month",month+1);
true;
}
定时调度,每月1号执行一次作业。未实现:每月1号跑上个月的数据
选中start,右键,选择编辑作业入口