2016-09-15 32 views
1

我的輸入表有3個字段 I1,I2和I3Talend數據集成:如何維護所有組件中的輸入列?

我必須在兩個表中插入這些字段。

表1應該有來自輸入字段的I1和I2並且它具有ID作爲PK列。 表2應該有I3。外鍵關係Table1 ID。使用talend,我在table1中插入了前兩列數據(在這個表輸出組件中省略了I3),並且我自動增加了ID。現在我想將ID和I3插入表中。

但在第二個表輸出中,我看不到I3列的流,因爲我們在第一步中省略了I3。

任何人都可以幫助如何獲得I3列的第二個表輸出組件?

感謝

回答

1

我在下面的方式這樣做...

在所有工作的看法: Over all job view

TMAP設置:自 tMap Settings

1

你應該能夠與2個輸出用一個簡單的TMAP這樣做:

tDBInput --- tMap ---tDBOutput1 
        ---tDBOutput2 

在TMAP中,你只需要選擇區域放於右輸出。 您可以在tMap(中央面板)的'Var'部分中使用Talend序列Numeric.sequence(「s1」,1,1),並將其作爲ID放入2個輸出中。

+0

如果我使用Numeric.sequence( 「S1」,1,1),這可能在插入數據創建問題(重複的條目ID是自動遞增值)。此解決方案將暫時工作。但它可能不是長期目的的好解決方案。 –

+0

如果您計劃多次運行它(不是一次性執行),您可以在tMap上讀取目標表作爲查找,並獲取最大值(ID)。然後你從這個maxID開始Numeric.sequence而不是1. – Corentin

0

另一種做法是使用兩步法。您可以在一份作業中創建兩個單獨的「處理行」或subjobs。

步驟1 - L1,L2

第一子作業將被作爲所述@Corentin,

tExcelInput1 -- tMap1 -- tDBOutput1 (l1, l2) 

步驟2 - L3

第二子作業,其可以連接與tDBInput1 onSubjobOk連接器,看起來像這樣

tExcelInput2 -- tMap2 -- tDBOutput2 (l3) 
       |--- tDBInput3, lookup ID (with l1) 

現在,第一個subjob將所有值都添加到表1中。當一切正常時,l3的所有值都將在l1上進行ID查找。這將與數據庫中的自動增量字段一起工作。查找只會看起來像SELECT ID FROM table1tMap,只需使用l3進行查找。

概述

如果您更輕鬆地查看作業,請檢查下面的圖片。

enter image description here

查找應該是這樣的:

enter image description here

+0

你好,非常感謝你這篇文章。我以同樣的方式完成了這項工作,但我們如何確保ID和I3來自同一行。此外,這種工作將被使用一次。如果它是一個預定的工作,我們如何爲新插入的行取得ID(假設我們已經在表1中有行)?假設如果插入順序在表1中插入行時發生了變化,會發生什麼情況?請建議這些場景...... –

+0

你說得對。查找應該對'row3.l1'和'row3.l2',*如果這些行實際上是唯一的*。如果新數據*也是唯一的,那麼每次打電話時,作業都會正常運行。由於我們只談論表格模式,所以我只是猜測。 – tobi6

相關問題