我正在使用Talend Open Studio进行数据集成来创建一个应该执行以下操作的工作:
例如,假设我有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
我设法在PROFILE
和USER
之间使用简单的tMap创建第1点和第2点。我在第一个REL_PROFILES_USERS
之后使用单独的tMap
填充tMap
在USER
上的PROFILE
和PROFILE.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(用户名=姓名)之间的关系,但仅仅因为我正在处理这些行
答案 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上)
玩得开心,祝你好运。