這裏是我提議的解決方案設計:
- 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