Talend中的父子关系

时间:2018-04-19 18:34:15

标签: talend data-integration tmap

面对有关如何在Talend中实现父子关系的问题和想法。

问题陈述:

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

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

(还有更多列和更多行 - 仅供参考几行)。 LastName和FirstName是不言自明的。 MemberCode表示关系。 A将是父母,B或C将是孩子。对于某个员工记录,数据将始终按顺序进行 - 这意味着完整的父子数据将连续排列。

预期结果:

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

  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具有以下逻辑 - enter image description here 这给我输出如下 -

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的行复制MemberFirstName的MemberFastName和MemberLastName的值。提前感谢。

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

2 个答案:

答案 0 :(得分:1)

这是我放在一起的解决方案:

enter image description here 您需要根据其MemberCode将行拆分为父级和子级。您将父项写入DependentLastNameDependentFirstName为空的文件,同时将父信息保存到ParentLastName中的全局变量(ParentFirstNametSetGlobalVar)。

当您移动到下一行(子行)时,您的父级已被保存,因为它始终是组中的第一行。因此,您可以使用子输出中的全局变量检索其名和姓,并将其写入同一物理文件。

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

答案 1 :(得分:0)

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

工作布局:

answer

使用的方法是捕获前面的行值(LastName& FirstName)并将它们存储在tMap中的变量中,然后将它们用于输出行。

enter image description here