Kettle: 插入/更新、表输出及表输入

1. 插入/更新

按照官方资料说明,插入/更新实现的功能只有两个:

  • 依据查询关键字段,将未被发现的行记录插入到表中。
  • 如果行记录在表中被找到,则比较需更新的字段,若更新字段不一致,则进行更新操作。
  • 插入\更新操作并不要求数据流里的字段及字段名称与目标表中的字段及字段名称一致,只需要自定义好映射条件即可。

在MySQL中构建两个表personal_a和personal_b,其创建语句及原始数据如下。

create table `personal_a` (
	`id` varchar (60),
	`surname` varchar (60),
	`name` varchar (60),
	`age` int (10),
	`sex` varchar (60)
); 
insert into `personal_a` (`id`, `surname`, `name`, `age`, `sex`) values('p001','张','三','18','male');
insert into `personal_a` (`id`, `surname`, `name`, `age`, `sex`) values('p002','李','四','19','female');
insert into `personal_a` (`id`, `surname`, `name`, `age`, `sex`) values('p003','王','五','18','female');
insert into `personal_a` (`id`, `surname`, `name`, `age`, `sex`) values('p004','赵','六','20','female');
insert into `personal_a` (`id`, `surname`, `name`, `age`, `sex`) values('p005','孙','七','19','male');
insert into `personal_a` (`id`, `surname`, `name`, `age`, `sex`) values('p006','周','八','21','female');
insert into `personal_a` (`id`, `surname`, `name`, `age`, `sex`) values('p007','吴','九','20','male');

create table `personal_b` (
	`id_b` varchar (30),
	`username` varchar (60),
	`age` int (10),
	`sex` varchar (30)
); 

先从【文件】—>【新建】—>【数据库连接】创建好接下来要用到的数据库连接。具体如下:

创建如下转换任务:

(1)配置 表输入。 点击【获取SQL查询语句】,找到对应的表,点击【确定】即可。然后会有一个弹出窗口提示是否需要展示字段名,点击【是】或【否】都可以。

(2)配置 插入\更新 实现插入功能。

  • 目标表:数据将要插入的表。点击【浏览】找到对应表名即可。
  • 用来查询的关键字段:这一部分用来设置查询的关键字段。表字段指示的是目标表的中的字段,流里的字段指示的是的转换的上一步操作传入的字段。比较符指定匹配方法。
  • 更新字段: 指定字段对应规则。上图在【映射匹配】中的【映射】框里指定了输入流中的字段与目标表中的字段对应规则。如果目标表中的某些字段没有指定输入流中的对应字段,则目标表中对应字段为NULL。

进行转换任务时,输入流中的指定字段和目标表中的指定字段进行比较操作,如果满足条件比较条件,并且输入流和目标表中的更新字段完全一致,则该条记录不会写入到目标表中,如果满足比较条件但对应的更新字段不一致,则对目标表中的数据进行更新。如果目标表中没有该条记录,则将输入流中的记录插入到目标表中。

设置完以后,运行转换作业。然后到mysql中查看personal_b。具体如下:

(3)更改 插入/更新配置。对personal_b中的username字段进行更新。将username的映射字段从surname更改为name。

重新运行转换作业,并查看personal_b表,其结果如下:

参考资料:https://wiki.pentaho.com/display/EAI/Insert+-+Update (或者插入/更新编辑左下角【Help】也可以进入该页面)。

2. 表输出

表输出类似于SQL中的insert功能。当相同的转换任务运行多次时,输入流中的数据会多次写入到目标表中。仍然以上述两个表为例。将personal_b中的数据清空。创建如下转换任务(表输入的设置与前文相同)、

对 表输出 进行设置,具体如下:

 然后运行该转换作业,然后到mysql中查看一下personal_b,如下:

 对上述表输出设置进行更改,如下:

重新运行转换任务之后,personal_b中的数据如下:

可以看到,两次转换任务的数据叠加到了一起。

3. 表输入

前面已经涉及到了表输入基本用法,这里重点讲一下表输入怎么接收参数?假如我们在表输入阶段筛选出sex='male'的数据,可以创建如下转换:

配置【自定义常量数据】,具体如下:

 配置【表输入】,具体如下:

 运行改转换,最后得到的数据如下:

注意:从【自定义常量数据】中设定的常量的字段的名称可以和表输入中where子句需要用到的字段的名称可以不一致,但是字段的数量及位置必须一致。

如果前述步骤传入【表输入】中的某个参数的值不止一个,如下:

 此时,需要在【表输入】的配置选项中勾选【执行每一句】,否则会报错。具体如下:

 此时,执行结果如下:

Kettle(Pentaho Data Integration)这个ETL工具中,插入/更新组件用于将数据插入到目标中或更新目标中的现有数据。该组件通常用于将源数据集成到目标数据库中。 插入/更新组件的主要作用是根据指定的条件判断目标中是否存在待插入的数据,如果存在则执行更新操作,否则执行插入操作。这样可以实现数据的增量更新,确保目标中的数据与源数据保持同步。 使用插入/更新组件的一般步骤如下: 1. 将源数据连接到输入步骤,配置数据源的连接信息和查询语句。 2. 将目标连接到输出步骤,配置目标的连接信息和字段映射关系。 3. 在插入/更新组件中,选择要进行插入/更新操作的目标。 4. 配置插入/更新的字段映射关系,将源数据字段与目标字段进行对应。 5. 设置条件字段,即用来判断目标中是否存在待插入的数据的字段。 6. 配置更新字段,指定需要在更新操作中更新的字段。 7. 设置插入/更新的策略,如仅插入、仅更新或同时插入更新。 8. 根据需要,可以进一步配置其他属性,如批量提交大小、错误处理等。 9. 运行作业或转换来执行插入/更新操作。 需要注意的是,插入/更新组件的配置可能会因具体的数据源和目标结构而略有差异。在实际使用中,根据具体的业务需求和数据情况进行灵活配置和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值