kettle进阶之database join

前言

这并不是一篇入门教学,且不是一篇高阶教学,仅仅针对kettle的database join。

那么问题来了,kettle的database join是什么?简而言之,不同库之间sql语句传值(个人自定义,如有不当,请海涵)。

案例1——一条数据传值

数据库A中有一张学生表student,表中有一个字段最近更新时间(last_update_date),数据库B中有一张教师表teacher,同样有一个字段(last_update_date),现在需要根据学生表的最近更新时间增量获取教师表数据,即获取教师表中大于学生表MAX(last_update_date)的数据。

方案如下:

  1. 获取学生表MAX(last_update_date),即表输入1的sql语句为:
select
	IFNULL(MAX(last_update_date),STR_TO_DATE('1970101','%Y%m%d'))
FROM student
  1. 将表输入1获取的查询结果传给表输入2,即表输入2的sql语句为
select * from teacher 
where last_update_date >= ?

且在表输入2的sql下方"从步骤输入数据"一栏,填写表输入1的步骤名称。
image

其中,?代表从表输入1传来的值。

扩展:如果要传一条数据中的多个值,根据数据中值的顺序,依次用?对应即可。

案例2——多条数据传值

案例1中表student有一个字段teacher_id,部分数据对应表teacher主键id,现在需要查询表student中老师属于表teacher的数据。

方案如下:

  1. 获取teacher表所有主键id集合,即表输入1的sql语句为:
select id from teacher
  1. 将表输入1的结果集传值给表输入2,即表输入2的sql语句为:
select * from student 
where teacher_id = ?

在表输入2的sql下方"从步骤输入数据"一栏,填写表输入1的步骤名称,且在“执行每一行?”一栏勾选上。
在这里插入图片描述

这里kettle做的相当于一个循环遍历结果集的?值。

结语

kettle对于数据处理不管是性能还是操作上都是相当友好的,关于增量更新方面还可以结合定时任务quarts使用,关于数据处理方面也可以结合其他代码脚本使用,目前感觉不太友好的是中文资料甚少。。。

猜你喜欢

转载自blog.csdn.net/qq_30051265/article/details/83376153