这里是我提议的解决方案设计:
- tSetGlobalVar在这里初始化变量“完成”为假。
- tLoop以
(Boolean)globalMap.get("finish") == false
作为结束条件启动while循环。
- tFileCopy用于将初始文件(例如A)复制到新文件(B)。
- tFileInputDelimited读取文件B.
- tUniqRow消除重复项。唯一身份记录转到tLogRow,您必须用tSalesforceOutput替换。如果有任何转到tFileOutputDelimited的记录(如果文件已经存在,则选中“抛出一个错误”)时,将记录复制到名为A(与原始文件同名的文件)。
- OnComponent行tUniqRow激活这为用下面的代码全局光洁度新值tJava后:
if (((Integer)globalMap.get("tUniqRow_1_NB_DUPLICATES")) == 0) globalMap.put("finish", true);
释用以下示例数据:
线1
第2行
线3
线2
线4
线2
线5
线3
在第一迭代中,5个不重复记录被推入tLogRow,3个重复推入文件A和“完成”不改变,因为这里重复。
在第二次迭代中,对2个唯一记录和1个重复操作进行重复。
在第3次迭代中,操作重复1次,因为没有重复,“finish”设置为true,循环自动结束。
下面是最终的结果:
你也可以决定使用其他的全局变量设置销售人员承诺的水平(使用语法(Integer)globalMap.get("commitLevel")
)。默认情况下,该变量将被设置为200,如果有任何重复,该变量将被设置为1。同时,将“finish”设置为true(不测试重复次数),第一次迭代的提交级别为200,第二次迭代的次数为1(且不需要超过2次迭代)。
根据可能的重复次数,您将决定更好的选择,但您可以注意到,您可以在不改变作业设计的情况下做到这一点。
我认为它应该可以解决您的问题。让我知道。
问候,
TRF
来源
2017-09-05 17:09:02
TRF
在审查我的第二个选项后,看起来它会稍微复杂一点,我写的tUniqRow需要在2bd迭代期间绕过。如果你想采用这个解决方案,用tJavaRow替换tJava,然后在提交级别设置为1后添加第二个tSalesforceOutput。最后它是一个不同的过程。你只需要选择哪一个更适合你的用例。 – TRF
我不知道为什么文件的内容在每次迭代时都会发生变化,因此重复次数会更改 – Edmondo1984
因为在每次迭代中,我们都会获得给定ID的第一条记录,并将重复项推送到文件中,从而记录更少的记录在每个时间。 – TRF