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 写入文件,其中 DependentLastName
和 DependentFirstName
为空,同时将 parent 信息保存到全局变量(ParentLastName
和 ParentFirstName
) 在 tSetGlobalVar
中。
当您移至下一行时,即 child 行,您的 parent 已被保存,因为它始终是组中的第一行。因此,您可以使用 children 输出中的全局变量检索其名字和姓氏,并将其写入同一个物理文件。
两个 tFileOutputDelimited
组件具有相同的设置;它们处于追加模式,并将选项 Custom the flush buffer size
设置为 1(这对于保持行按正确顺序排序很重要)。
@iMezouar提供的解决方案很好用。发布另一种替代方式。
工作布局:
使用的方法是捕获前一行的值(姓氏和名字)并将它们存储在 tMap 内的变量中,然后将它们用于输出行。
在弄清楚如何在 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
这是我整理的解决方案:
DependentLastName
和 DependentFirstName
为空,同时将 parent 信息保存到全局变量(ParentLastName
和 ParentFirstName
) 在 tSetGlobalVar
中。
当您移至下一行时,即 child 行,您的 parent 已被保存,因为它始终是组中的第一行。因此,您可以使用 children 输出中的全局变量检索其名字和姓氏,并将其写入同一个物理文件。
两个 tFileOutputDelimited
组件具有相同的设置;它们处于追加模式,并将选项 Custom the flush buffer size
设置为 1(这对于保持行按正确顺序排序很重要)。
@iMezouar提供的解决方案很好用。发布另一种替代方式。
工作布局:
使用的方法是捕获前一行的值(姓氏和名字)并将它们存储在 tMap 内的变量中,然后将它们用于输出行。