2014-01-23 90 views
4

我有一種情況,我需要在故事中並行運行五個不同的子作業。問題是,在我的選擇查詢中,我會得到五個不同的ID,然後對於每個特定的ID,我需要運行五個不同的工作。 tparrallelize組件的問題在於,它不允許我將上下文變量傳遞給每個子作業,即在這種特殊情況下是id。在故事中運行並行作業

select table from table limit 5; ---->用不同的ID作爲參數

任何幫助將高度讚賞

感謝

回答

4

我不知道我是否正確地理解你在這裏做什麼同樣的工作的五個不同的實例但是如果要分離出每個ID並將它們存儲爲5個單獨的上下文變量,那麼每個作業都可以訪問自己的上下文變量,併爲每個ID存儲正確的ID並使用它們。

所以,我會從你的數據庫輸入組件開始(只需選擇你想要的ID)並將其輸入到tFlowToIterate。通過迭代流將其連接到tFixedFlowInput組件,並在您的模式「鍵」和「值」中創建2個字段。使用內嵌表格指定「密鑰」應該是((Integer)globalMap.get("tFlowToIterate_1_CURRENT_ITERATION")),「值」應該是((String)globalMap.get("row1.SupplierPartNumber"))

Iterate through the returned IDs and put in Global Map and then retrieve

我會再拋出此成tMap組件在那裏我把"ContextNumber" + row2.key到映射鍵列只是爲了使它有點比迭代次數爲您的背景下更爲明顯,然後直接哺養變成tContextLoad

Map the iteration value

從那裏你可以OnSubjobOK您tParallelize組件和你的工作聯繫在一起。在每個作業中,將作業配置爲使用適當的上下文變量。

enter image description here

+1

一個更簡單的解決方案是指在tRunJob的迭代(設定您想要多少線程擁有,那麼上下文參數從row1.param1傳遞到childjob,這樣你就可以設置單一, double,multithread –

+0

@BalazsGunics如果我們不知道我們想要擁有多少線程(從數據源中選擇元組的數量),有沒有辦法使用iterate鏈接的並行執行功能? –

+0

你可以做類似於:「select table from table limit」+ context.threadCount,然後在Iterate鏈接上使用相同的context.threadCount :) –