使用Talend创建行后,将行添加到多对多关系表中

时间:2016-07-19 09:49:27

标签: many-to-many talend data-integration

我正在使用Talend Open Studio进行数据集成来创建一个应该执行以下操作的工作:

  1. 从table1获取一行
  2. 如果表2中存在具有特定值的行:向table2中添加一行
  3. 使用table1"行中的id和table2' s(现有或新创建的)行中的id,在多对多关系表中添加一行
  4. 例如,假设我有PROFILE,USER和REL_PROFILES_USERS表,我需要从PROFILE开始填充USER,并且每个具有相同名称的PROFILE行将与同一个USER关联

    所以我从PROFILE表开始

     id |  name  | address  
    -----------------------------------
      1 | jsmith | 1234 Main Street  
      2 | jasonp | 321 Secondary Street  
      3 | jsmith | NULL
    

    我希望最终以这种方式播放USER

     id |  username
    ----------------
      1 | jsmith 
      2 | jasonp 
    

    和REL_PROFILES_USERS

     user |  profile
    ----------------
      1   |    1 
      1   |    3
      2   |    2
    

    我设法在PROFILEUSER之间使用简单的tMap创建第1点和第2点。我在第一个REL_PROFILES_USERS之后使用单独的tMap填充tMapUSER上的PROFILEPROFILE.name = USER.username之间的所有匹配上加上public Class Request { private String number; private String amount; private String currency; } Request request = new Request(); request.setNumber("tata"); request.setCurrency("toto"); 和内部联接的subjob。

    我想要做的是在插入新行后立即填充USER的同一个子工作区中填充REL_PROFILE_USERS,或者当您看到已经存在的行时,不知道USER和PROFILE(用户名=姓名)之间的关系,但仅仅因为我正在处理这些行

1 个答案:

答案 0 :(得分:1)

您好,您没有说明您正在使用哪个数据库,因此我将假设MS SQL用于讨论Talend具有主要数据库的等效数据库组件,以及用于其他任何事情的通用JDBC。

我建议尝试这个流程

tMSSqlInput(来自个人资料) - > tMSSqlOutput(在用户上) - > tMSSqlLastInsertId(获取插入的ID) - > tMSSqlOutput(在ref_profiles_user上)

或者,您可以在第一次插入时打开tMsSqlOutput中的标识插入。这样您就知道插入到用户表中的行的PK。然后您可以继续插入到rel_users_profile表中。我建议不要为第一个表生成自己的PK,除非这是将记录插入此表的唯一过程。调用数据库中的序列来获取下一个序列号比生成自己的seq更安全一些。

tMSSqlInput(来自个人资料) - > (也许通过调用下一个序列生成ID或在tMap中生成自己的ID) - > tMSSqlOutput(在用户上) - > tMSSqlOutput(在ref_profiles_user上)

玩得开心,祝你好运。