我有一个数据源,其中每行有五个字段:
company name; year; code; value;
在我的目标输出行模型中,我想生成这样的行
company name;year;value1;value2;value3;value4
其中 value1,value..N 不是单个代码的串联,而是“映射”。 IE。代码 50 =>“总收入”
所以我需要执行以下逻辑:
- 首先选择同一公司名称/年份的所有记录
- 然后应用一些自定义 Java 逻辑来执行我的代码和输出行的字段之间的映射。
这是一个大约 1M 行的内存中映射缩减。在 Talend Open Studio for Data Integration 中应如何处理此问题?
最佳答案
您可以这样做,这本质上是 Maira Bay 已经建议的方法:
- 设置您的数据源以一次发出一行。我为此使用了 tFixedFlowInput 。您可能必须从文件中读取。
- 可以选择使用
tSortRow
按公司名称和年份进行排序。 - 使用
tMap
将每行的值映射到结果行中的相应列,并使用类似input.code.equals("code for this column") 的保护子句?输入值:null
。 - 使用
tAggregateRow
聚合行,按公司名称和年份分组,为每个值行选择第一个值 - 但请确保忽略空值。 - 对结果行执行任何您想要的操作。
我用一些示例数据进行了尝试,因此在步骤 1 中使用了 tFixedFlowInput
,并且它在我的 TOS 6.3.1 机器上有效。
请注意:所提出的解决方案假设您仅获得公司名称、年份和代码的每个组合的一个值。
关于java - 在 Talend Open Studio for Data Integration 中一次处理一组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43154211/