前言
这并不是一篇入门教学,且不是一篇高阶教学,仅仅针对kettle的database join。
那么问题来了,kettle的database join是什么?简而言之,不同库之间sql语句传值(个人自定义,如有不当,请海涵)。
案例1——一条数据传值
数据库A中有一张学生表student,表中有一个字段最近更新时间(last_update_date),数据库B中有一张教师表teacher,同样有一个字段(last_update_date),现在需要根据学生表的最近更新时间增量获取教师表数据,即获取教师表中大于学生表MAX(last_update_date)的数据。
方案如下:
- 获取学生表MAX(last_update_date),即表输入1的sql语句为:
select
IFNULL(MAX(last_update_date),STR_TO_DATE('1970101','%Y%m%d'))
FROM student
- 将表输入1获取的查询结果传给表输入2,即表输入2的sql语句为
select * from teacher
where last_update_date >= ?
且在表输入2的sql下方"从步骤输入数据"一栏,填写表输入1的步骤名称。
其中,?代表从表输入1传来的值。
扩展:如果要传一条数据中的多个值,根据数据中值的顺序,依次用?对应即可。
案例2——多条数据传值
案例1中表student有一个字段teacher_id,部分数据对应表teacher主键id,现在需要查询表student中老师属于表teacher的数据。
方案如下:
- 获取teacher表所有主键id集合,即表输入1的sql语句为:
select id from teacher
- 将表输入1的结果集传值给表输入2,即表输入2的sql语句为:
select * from student
where teacher_id = ?
在表输入2的sql下方"从步骤输入数据"一栏,填写表输入1的步骤名称,且在“执行每一行?”一栏勾选上。
这里kettle做的相当于一个循环遍历结果集的?值。
结语
kettle对于数据处理不管是性能还是操作上都是相当友好的,关于增量更新方面还可以结合定时任务quarts使用,关于数据处理方面也可以结合其他代码脚本使用,目前感觉不太友好的是中文资料甚少。。。