2016-07-13 60 views
0

我有一個Pentaho Kettle作業,可以從x個表中加載數據,並將其放入具有不同模式的目標表中。在運行時對列動態執行轉換

假設我有表1,像這樣:

An example source data table

我想這個表加載到目標表看起來像這樣: An example destination data table

列已被重命名時,訂單已更改,數據已轉換。重命名和順序很容易通過使用Select Values步驟進行管理,該步驟可以在ETL元數據注入步驟中使用,使其依賴於在運行時加載的一些配置值。

但是,如果我需要在某些列上執行某些轉換邏輯,那麼基於它們在目標表中的位置,這似乎不那麼簡單。

在我的例子,我想列「國家或地區名稱」資本化,而列「評級」被難倒(如更改實數到以前的整數值)。

雖然我可以通過隻手動添加改造完成每項做到這一點,我想我的解決方案是動態的,所以它可以很容易地通過校驗和組件運行「國家或地區名稱」一欄,或執行天花板上「評級」。

我可以很容易地包裝這些轉變在另一個改造,使他們可以在需要的時候進行參數設置和執行: An example of a transformation wrapper

但是,在那裏我遇到麻煩的是,當我處理的數據行,我需要一種方法能夠說:

  • 列「國家或地區名稱」應通過資本傳遞變換
  • 列「評級「應通過地板傳遞變換
  • 欄(S)」 AnythingElse「應通過一些其它可以通過變換

有沒有辦法來動態地打出列在一排,並執行根據可以提供的一些配置元數據對每一個進行不同的轉換?

從邏輯上講,這將是這樣的事情,雖然我懷疑有可能是來處理它作爲循環或某種形式的動態變化的,而不是繪製出每列的路徑的方式: Logical diagram of the process - each column going to a different transform

水壺非常靈活,似乎必須有辦法做到這一點,我只是努力知道使用哪些組件,以及如何去做。那裏的任何專家都有一些建議?

我正在處理一些比較大的數據集(數以百萬計的行),所以不願意使用Row Normaliser/Denormaliser或者如果可能的話寫入文件/數據庫。

回答

0

您是否考慮過修改後的Java腳本值步驟?從數據網格步驟開始,選擇值步驟,然後是修改後的Java腳本值步驟。在該步驟中,您將根據需要轉換每個列的值並將其輸出到文件中。

這當然需要一些Java腳本知識,但考慮到您的示例,似乎所需的知識是非常基本的。