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,右键,选择编辑作业入口