我有一个数据源,每行有五个字段:
company name; year; code; value;
在我的目标输出行模型中,我想生成一个像这样的行
company name;year;value1;value2;value3;value4
其中value1,value..N不是单个代码的串联,而是"映射"。即代码50 => "总收入"
所以我需要执行以下逻辑:
这是内存映射减少约1M行。如何在Talend Open Studio for Data Integration中处理这个问题?
答案 0 :(得分:2)
选择同一公司名称/年的所有记录
您可能希望使用tAggregate
(https://help.talend.com/display/TalendOpenStudioComponentsReferenceGuide521EN/18.1+tAggregateRow)按公司名称和年份对流进行分组
应用一些自定义java逻辑,执行我的代码和输出行的字段之间的映射。
Talend有一个名为tMap
的组件,允许您将输入字段映射到输出字段。
在tMap
中,您可以使用以下内容:
(假设input
是您tMap
流量的名称,而output
是您的tMap
流量的名称
在output.field1
放input.code == 50? input.value : 0
在output.field2
放input.code == 60? input.value : 0
在output.field2
放input.code == 70? input.value : 0
等
如果field
用于另一个0
,则假设您可以将value
列与code
一起保留。
如果您希望每个value
的{{1}}位于code
之外的不同输出行中,您可以使用与上述类似的逻辑,只需进行每项测试({ {1}})在另一个输出表中,然后在tMap
之后过滤掉code == 70? input.value : 0
(使用0
)的行。
要添加输出表格,您可以使用tFilter
右上角的tMap
符号。
有关如何使用+
:https://help.talend.com/display/TalendOpenStudioComponentsReferenceGuide54EN/tMap
我希望这有帮助!
答案 1 :(得分:2)
你可以这样做,而且它基本上是Maira Bay已经建议的方法:
tFixedFlowInput
。您可能必须从文件中读取。tSortRow
进行排序。tMap
等保护条款将每行的值input.code.equals("code for this column") ? input.value : null
映射到结果行中的相应列。tAggregateRow
聚合行,按公司名称和年份进行分组,为每个值行选择第一个值 - 但请务必忽略空值。我尝试使用一些示例数据,因此在步骤1中使用了tFixedFlowInput
,并且它在我的机器上在TOS 6.3.1中为我工作。
注意:建议的解决方案假设每个公司名称,年份和代码组合只有一个值。
答案 2 :(得分:0)