2014-10-07 52 views
3

我正在使用Pentaho Kettle(PDI),我試圖管理一個流程,在那裏有幾個轉換應該像那些函數那樣工作。我會更具體。我創建了一些轉換,在某些csv文件的幾個字段上進行一些修改。每個轉換都只在csv文件的一個字段上起作用。因此,第一個轉換應修改值,例如,僅從文件的第一列開始,第二次轉換應該在另一列上進行,等等。由於花費時間創建每一個單獨的轉換,我希望那些可重用的其他作業/轉換使用相同的值。如果你想要一個例子,我已經創建了一個可以提高電話號碼質量(和許多其他)的轉換。 這裏是一個主要工作的「一般」主意: enter image description here在Pentaho數據集成中重複使用不同數據的轉換Kettle

我的問題在於關於通過轉換傳遞數據。要做到這一點,我每次都將數據放入結果表中,使用「從結果中複製行」步驟。完成所有修改後,我使用「放置行結果」步驟將數據放入結果表中。 這裏只是一個例子(當然真正的轉換比這個更復雜)。

enter image description here

正如你可能知道,我們必須指定在「從結果複製行」未來的領域,所以如果我有另外的工作/改造與differet文件我有行爲使用這種轉變更改「從結果中複製行」步驟的模式。

可能有不同的方法來移動數據流,這可能比這更容易。我也考慮過使用參數,但我不知道是否可以使用來自結果表的字段來傳遞它們。還有另外一個問題:「結果表是從轉換中返回值的唯一方法嗎?」

我也考慮過在一個轉換中並行執行所有的轉換,只傳遞它們感興趣的值和一個鍵,然後用「合併連接步驟」來融合所有單個字段。這也是一個同步問題。所以有誰知道解決這個問題的好方法? ...我認爲它存在一個標準的方法來做這一切...

+0

您是否考慮過使用* Transformation Executor *組件? – 2014-10-07 22:52:33

+0

應該解決我的問題嗎? ......我的意思是,這不僅僅是一份工作中的變革執行嗎? – giogix 2014-10-08 06:33:58

+0

我認爲優勢在於處理與轉換流領域相關的輸入和輸出參數。也許這種方式你可以沒有*從結果中獲取行*和*將行復制到結果*組件。 – 2014-10-08 09:24:14

回答

4

我的問題的解決方案是基於使用「映射(子轉換)」步驟。 在工作中沒有工作,我們可以調用另一個轉換中的所有轉換,並用「映射(子轉換)」步驟調用這些轉換。這裏有一個例子:

enter image description here

在這種,我們必須指定輸入字段的每一步,我們要修改。我們可以通過那些。下面是這種步驟的「輸入」選項卡中的一個例子:

enter image description here

正如你所看到的,我們必須指定的字段,它被稱爲主轉變,我們可以改變它,適應它在子變換(在這種情況下,「電話」字段變成「PHONE」)。 我們還必須在「輸出」選項卡中指定輸出字段,與我們對輸入所做的相同。

子改造看起來後續:

enter image description here

爲了讓你必須使用「映射輸入規範」的步驟進入現場,並把修改後的油田產量,你必須使用「映射輸出規範」。在「映射輸入規範」中,您必須指定哪些是傳入字段,從現在開始您將使用此轉換的所有時間都是相同的。適應這個領域應該在外部進行,在主要轉型中,所以你可以重新使用子轉型不要改變任何東西。