Parent-Child Talend 中的关系

Parent-Child relationship in Talend

在弄清楚如何在 Talend 中实现 parent-child 关系时遇到问题和想法。

问题陈述:

有一个包含以下格式数据的 Feed 文件

MemberCode|LastName|FirstName
A|SHINE|MICHAEL 
B|SHINE|MICHELLE 
C|SHINE|ERIN 
A|RODRIGUEZ|DAMIAN 
A|PAVELSKY|STEPHEN        
B|PAVELSKY|TERESA

(有更多的列和更多的行 - 只有几行供参考)。 LastName 和 FirstName 是 self-explanatory。 MemberCode 表示关系。 A 将是 parent,B 或 C 将是 child。对于某个员工记录,数据将始终按顺序排列 - 这意味着完整的 parent-child 数据将在连续的行中。

预期结果:

以上数据需要按以下格式输出:

  MemberCode|MemberLastName|MemberFirstName|DependentLastName|DependentFirstName
A         |SHINE         |MICHAEL        |                 |                  
B         |SHINE         |MICHAEL        |SHINE            |MICHELLE          
C         |SHINE         |MICHAEL        |SHINE            |ERIN              
A         |RODRIGUEZ     |DAMIAN         |                 |                  
A         |PAVELSKY      |STEPHEN        |                 |                  
B         |PAVELSKY      |STEPHEN        |PAVELSKY         |TERESA            

目前我尝试过的:

Talend 作业包含这些组件:tFileInputDelimited->tMap->tLogRow tMap 具有以下逻辑 - 这给了我如下的输出 -

MemberCode|MemberLastName|MemberFirstName|DependentLastName|DependentFirstName
A         |SHINE         |MICHAEL        |                 |                  
B         |              |               |SHINE            |MICHELLE          
C         |              |               |SHINE            |ERIN              
A         |RODRIGUEZ     |DAMIAN         |                 |                  
A         |PAVELSKY      |STEPHEN        |                 |                  
B         |              |               |PAVELSKY         |TERESA

如何为具有 MemberCode B 或 C 的行复制 MemberCode A 的 MemberFirstName 和 MemberLastName 的值。提前致谢。

平台: Talend Open Studio for Data Integration 版本:6.5.1

这是我整理的解决方案:

您需要根据成员代码将行拆分为 parents 和 children。您将 parent 写入文件,其中 DependentLastNameDependentFirstName 为空,同时将 parent 信息保存到全局变量(ParentLastNameParentFirstName ) 在 tSetGlobalVar 中。

当您移至下一行时,即 child 行,您的 parent 已被保存,因为它始终是组中的第一行。因此,您可以使用 children 输出中的全局变量检索其名字和姓氏,并将其写入同一个物理文件。

两个 tFileOutputDelimited 组件具有相同的设置;它们处于追加模式,并将选项 Custom the flush buffer size 设置为 1(这对于保持行按正确顺序排序很重要)。

@iMezouar提供的解决方案很好用。发布另一种替代方式。

工作布局:

使用的方法是捕获前一行的值(姓氏和名字)并将它们存储在 tMap 内的变量中,然后将它们用于输出行。