《Kettle实操案例一(全量/增量更新与邮件发送)》
目录
- 一、场景描述:
- 二、要求:
- 三、思路
- 四、整体作业
- 五、各部分详细配置
- 1、Start
- 2、转换-获取执行开始时间
- 3、获取目标表抽取前行数
- 4、检验字段的值
- 5、增量更新
- 6、全量更新
- 7、获取目标表抽取后行数
- 8、获取执行结束时间
- 9、日志写入数据库
- 10、写日志
- 11、发送数据抽取完成邮件
- 五、最终效果
一、场景描述:
有两张数据表,tableA(源表),tableB(目标表),存在不同的数据库中,现在需使用kettle作为ETLI具将tableA里的数据抽取至tableB里并记录日志信息。
二、要求:
(1)目标表无数据时,使用全量更新实现数据抽取;
(2)目标表有数据时,使用增量更新实现数据抽取;
(3)将转换名称、执行日期(单位/天),转换执行时长(单位/秒),目标表抽取前行数,目标表抽取后行数,执行开始时间,执行结束时间插入日志表;
(4)执行结果发送到指定邮箱
三、思路
- 判断目标表是否有数据,可以通过检验字段的值组件,将目标表抽取前行数传入用于判断
- 全量更新只需要表输入和插入/更新组件
- 增量更新需要定义一个变量用于获取目标表最大的时间,以便插入增量数据
- 因为需要记录将转换名称、执行日期(单位/天),转换执行时长(单位/秒),目标表抽取前行数,目标表抽取后行数,执行开始时间,执行结束时间等日志信息,可以通过获取系统信息、表输入组件获取,转换执行时长(单位/秒)可以通过计算器计算执行开始时间,执行结束时间的差值,最后写入数据库
四、整体作业
五、各部分详细配置
1、Start
按需要配置定时任务
2、转换-获取执行开始时间
获取系统日期作为变量${execution_date}
3、获取目标表抽取前行数
获取目标表的记录数,存入${target_table_rows_before}参数
4、检验字段的值
判断目标表记录数${target_table_rows_before}是否大于0
5、增量更新
获取转换的名称,存入${transformation_name}变量
获取源表记录时间在目标表最大记录时间之后的记录,插入目标表
6、全量更新
获取转换的名称,存入${transformation_name}变量
通过表输入步骤获取源表所有的记录后,导入目标表
7、获取目标表抽取后行数
将抽取后目标表记录数存入${target_table_rows_after}参数中
8、获取执行结束时间
将系统时间存入${execution_end_date}变量,因为这个步骤在抽取之后,此时的系统时间可视为抽取结束时间
9、日志写入数据库
获取转换名称、执行日期(单位/天),目标表抽取前行数,目标表抽取后行数,执行开始时间,执行结束时间,并通过计算器计算得到转换执行时长(单位/秒)后,存入日志表
10、写日志
打印日志,确认变量正确
11、发送数据抽取完成邮件
配置收/发件人等信息
五、最终效果
1、作业执行前,目标表为空
2、执行作业后,导入数据到目标表成功
3、全量更新日志已插入
4、此时在源表新增2条新数据,用于测试增量更新
5、执行后,新增数据已导入
6、增量更新日志已插入