数据库中有订单表tb_order,其中有order_id和user_id和user_name等字段。
数据库中有用户资料表tb_user,其中有user_id和user_name等字段。
现在需要使用tb_user.user_name来更新tb_order.user_name,两个表的关联条件是tb_order.user_id = tb_user.user_id。
通常,在两个表都静止的时候,可以使用一个update来解决,如下。
update tb_order
set user_name = (select user_name from tb_user u where u.user_id = tb_order.user_id);
但是,如果这两个表的数据量较大,且两个表都在生产频繁使用的时候,一个update语句会锁表,且需要较长的时间,从而可能会导致正常的业务无法快速进行。
此时,就应该单独遍历tb_order表中的每一条记录,然后根据tb_order.user_id去tb_user中查询每一条记录中的user_name,最后根据tb_order.order_id来更新tb_order.user_name;这个单独遍历的方式,虽然不能完全解决锁表引起的问题,但是也可以较大概率避免。但是这个配置模式,效率非常低。
还有一个更好的思路,一个转换就可以完成的配置。思路如下:
1、使用表输入,从tb_order表中获得数据;
2、使用数据库连接控件,直接从表输入的结果中获得参数,然后执行查询,从tb_user表得到需要的信息;
3、使用插入更新空间,直接修改tb_order中指定的字段。
因为这三个步骤在一个转换中,所以,可以在第2步和第三步中设置并发数量来提高kettle的处理效率。
配置如下: