面对有关如何在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
具有以下逻辑 -
这给我输出如下 -
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
答案 0 :(得分:1)
这是我放在一起的解决方案:
您需要根据其MemberCode将行拆分为父级和子级。您将父项写入DependentLastName
且DependentFirstName
为空的文件,同时将父信息保存到ParentLastName
中的全局变量(ParentFirstName
和tSetGlobalVar
)。
当您移动到下一行(子行)时,您的父级已被保存,因为它始终是组中的第一行。因此,您可以使用子输出中的全局变量检索其名和姓,并将其写入同一物理文件。
两个tFileOutputDelimited
组件都具有相同的设置;它们处于追加模式,并且选项Custom the flush buffer size
设置为1(这对于保持行按正确顺序排序很重要。)
答案 1 :(得分:0)
@iMezouar 提供的解决方案效果很好。发布另一种替代方式。
工作布局:
使用的方法是捕获前面的行值(LastName& FirstName)并将它们存储在tMap中的变量中,然后将它们用于输出行。