zoukankan      html  css  js  c++  java
  • 在kettle中快速更新一个字段中的信息

    数据库中有订单表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的处理效率。
    配置如下:

  • 相关阅读:
    Spring自动装配Beans
    Spring过滤器组件自动扫描
    Spring自动扫描组件
    Spring EL运算符实例
    Spring EL方法调用实例
    Spring EL bean引用实例
    Spring EL hello world实例
    Spring @PostConstruct和@PreDestroy实例
    Spring Bean init-method 和 destroy-method实例
    Spring Bean InitializingBean和DisposableBean实例
  • 原文地址:https://www.cnblogs.com/babyha/p/13890446.html
Copyright © 2011-2022 走看看