【问题标题】:Add row into many to many relationship table after row creation with Talend使用 Talend 创建行后将行添加到多对多关系表中
【发布时间】:2016-07-19 09:49:26
【问题描述】:

我正在使用 Talend Open Studio for Data Integration 创建一个应该执行以下操作的作业:

  1. 从 table1 中获取一行
  2. 如果表2中不存在具有特定值的行:在表2中添加一行
  3. 使用 table1 的行中的 id 和 table2 (现有或新创建的)行中的 id 将一行添加到多对多关系表中

例如,假设我有表 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

我想最终以这种方式填充用户

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

和 REL_PROFILES_USERS

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

我已经设法通过PROFILEUSER 之间的简单 tMap 说明第 1 点和第 2 点,并且我在第一个 tMap 之后使用带有 tMap 和在PROFILE.name = USER.usernameUSERPROFILE 之间的所有匹配进行内连接。

我想做的是在我填充 USER 的同一子作业中填充 REL_PROFILE_USERS,在插入新行后不久或当您看到已经存在的行时,不知道 USER 和 PROFILE 之间的关系(那个用户名=名字)但只是因为我正在处理那些行

【问题讨论】:

  • 那么你的工作怎么样?
  • 分 2 次完成。第一次通过从您的流程中过滤掉不同的用户。然后将其与目标表连接起来。在 tMap 中捕获内部连接拒绝 -> 您的表中缺少用户。将这些用户添加到您的表中。第二遍,将用户表与您的输入流连接起来。

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


【解决方案1】:

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

我建议尝试这个流程

tMSSqlInput(来自配置文件)-> tMSSqlOutput(在用户上)-> tMSSqlLastInsertId(获取插入的 id)-> tMSSqlOutput(在 ref_profiles_user 上)

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

tMSSqlInput(来自配置文件)->(可能通过调用 get next 序列生成 ID 或在 tMap 中生成您自己的 ID)-> tMSSqlOutput(在用户上)-> tMSSqlOutput(在 ref_profiles_user 上)

玩得开心,祝你好运。

【讨论】:

  • 您好,感谢您的回答,我想知道如何获取 profile_id。你猜对了 DB,它是 MS SQL
  • 您在第一个 tMsSqlInput 中获得 profile_id,使用类似“SELECT id, name, address FROM profile”的查询
  • 查看示例流程中更新的表名以匹配您的场景。
猜你喜欢
  • 2018-03-19
  • 2021-01-19
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 2016-02-02
  • 2017-12-08
  • 1970-01-01
相关资源
最近更新 更多