2017-05-26 63 views
0

我有一組表中的X行作爲了Talend ETL要基於條件的一組行的篩選一行

job1 20170506 Sat Not Run 
job1 20170507 Sun Completed 
job1 20170508 Mon Not Run 
job1 20170513 Sat Completed 
job1 20170514 Sun Failed 
job1 20170515 Mon Not Run 
job1 20170520 Sat Not Run 
job1 20170521 Sun Not run 
job1 20170522 Mon Not Run 
job2 20170506 Sat Failed 
job2 20170507 Sun Not run 
job2 20170508 Mon Completed 
job2 20170513 Sat Completed 
job2 20170514 Sun Completed 
job2 20170515 Mon Completed 
job2 20170520 Sat Not Run 
job2 20170521 Sun Not run 
job2 20170522 Mon Not Run 
and so on. 

我需要週末(週六,週日,週一)作爲單一的實體,應該得到一個結果表如下:

job1 20170507 Sun Completed 
job1 20170513 Sat Completed 
job1 20170522 Mon Not Run 
job2 20170508 Mon Completed 
job2 20170515 Mon Completed 
job2 20170522 Mon Not Run 

如果工作有任何這三天完成的條目,完成它被認爲是。否則,如果全部未運行,則採取未運行的最新條目。這怎麼可能呢?

我可以創建一個包含週六至週一間隔日期表如下:

Table Y 

20170506 Sat 20170508 Mon 
20170513 Sat 20170515 Mon 
20170520 Sat 20170522 Mon 

請給我一個想法,我應該使用tJava,或tIntervalMatch成分,怎麼可能。

回答

0

好的。如果我明確瞭解您的要求,那麼我認爲這將是您的答案。

Input(EntireTable) - > Tmap(Left outer Join) - > Complt_FLG =「Y」then all set ^ | | Lkp(只記錄狀態爲已完成,Complt_FLG爲「Y」)

如果Complt_FLG爲空(表示不是Y),則使用taggregate並通過在Job id上進行分組來獲得最大日期記錄。

請讓我知道這是你在找什麼或任何問題。

1

這裏是我的建議: enter image description here

1子作業是在這裏添加序列基礎上,平日輸入和分離已完成和NotCompleted工作。
爲此我使用下面tMap_23其中兩個流具有相同的瑪: enter image description here

新字段jobnumber可以包含JOBNAME +用短劃線(作業-1例如)分離的序列號的值。
由於序列基於工作日,因此與同一作業名稱關聯的每條線都具有相同的jobNumber值。
這兩個流程的結果都被記憶到專用的tHashOutput(這裏稱爲Completed和NotCompleted)。

之後,第二個子作業啓動,以排除與已完成關聯的NotCompleted記錄。這是tMap_24的作用: enter image description here 這是一個基於jobNumber的經典內連接。捕獲內部連接被拒絕的記錄,然後對jobNumber asc和execDate desc(tSortRow_1)進行排序,並刪除第一個(tUniqRow_6)除外的具有相同jobNumber的finaly記錄,並將結果附加到tHashOutput的末尾,稱爲第一個Completed subjob(這裏是RawResult任務)。

末子作業閱讀tHashInput稱爲RawResult,刪除多餘的場jobnumber可以,所有排序基於作業的記錄之前在控制檯上顯示結果: enter image description here

希望這有助於。
TRF

0

這裏是我的回答: -

我劃分了任務分成兩個子作業。

  1. 第一個subjob讀取表Y的數據,並一次一個週末迭代。在這裏,我已將表Y的數據存入文件,請查找下面的快照鏈接。

enter image description here

  • 在主子作業,我們將取在可變MAX_DATE和MIN_DATE一週開始和周結束日期和將通過這兩個下一個子子作業。

  • 在子子作業中,我們將從主文件中提取數據,並根據job_name和日期對數據進行排序,並將記錄傳遞給tjavaflex。請查找tSortRow屬性和子子作業的圖像。

  • 子子作業圖片: enter image description here

    在這裏,我已經創建了8個上下文變量孩子子作業: -

    一)MIN_DATE:通過父作業越來越 B)MAX_DATE:。正在通過父作業 c。)JOB_NAME:是處理記錄中的作業名稱 d。)DATE:處理記錄作業的執行日期 e。)DAY:是作業的執行日期進行處理記錄 F)STATUS:。。作業 克狀態)OUT_JOB_NAME 1H)OUT_DATE ⅰ)OUT_DAY j)的OUT_STATUS

    OUT前綴變量是那些需要打印作爲輸出。在tJavaflex中,我寫了邏輯,它檢查傳入行是否在一週之間,並檢查status = completed,一旦我們得到狀態=完成,我們將設置flag ='false'。因此對於同一個job_name,它不會再檢查該條件。

    一旦job_name被更改,標誌值將變爲true,並在該週末再次重複上述步驟。