kettle从入门到精通 第四十二课 kettle 1对多表拆分同步
1、在有的业务场景中,会涉及一对多表拆分同步的业务场景,也就是说原表是一张表,将原表字段进行拆分放入目标库中的多张表,如下面的示例将表student_third中的数据
同步到student、teacher 两张表。
数据源表student_third
CREATE TABLE `student_third` ( `id` bigint not NULL primary key auto_increment, `name` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL, `teacher_name` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL, `createtime` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
目标表student、teacher
CREATE TABLE `student` ( `id` bigint not NULL primary key auto_increment, `name` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL, `teacher_serialno` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `createtime` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
CREATE TABLE `teacher` ( `id` bigint not NULL primary key auto_increment, `serial_no`varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL, `name` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL, `createtime` datetime DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
2、下图涉及到的步骤比较简单,表输入【读取三方学生信息表】加载源数据,从student_third表中读取数据,javascript代码【根据teachernameMd5计算出teacherSerialno】通过md5计算外键,表输出【写入学生信息表】写入student表,
分组【按照教师名字分组】按照字段teacher_name进行分组,表输出【写入教师表】将数据写入teacher表。
3、步骤【根据teachernameMd5计算出teacherSerialno】-》步骤【写入学生信息表】、步骤【根据teachernameMd5计算出teacherSerialno】-》步骤【按照教师名字分组】两者是并行的关系,连线需要
是复制模式,如下图所示。
4、步骤【读取三方学生信息表】实现逻辑比较简单,直接从表student_third 读取数据,如下图所示。
5、写入student、teacher两个表需要再同一个事务中,双击画布空白处进行设置即可,如下图所示。
6、步骤【写入学生信息表】实现逻辑比较简单,如下图所示。
7、多个学生的老师有可能是同一位,所以根据老师名字进行分组,如下图所示。
8、步骤【写入教师表】实现逻辑比较简单,如下图所示。