2016-02-15 42 views
0

我有一個遺留數據庫,我正在做一些ETL工作。我在舊錶中有列有條件映射到我的新表中的列。這些條件基於關聯的列(表示對象形狀的同一表中的列,我們可以稱該列爲SHAPE)。例如:合併(或合併)多個「複製列」轉換問題

柱dB4D映射到柱:

B4如果SHAPE = 5
B3如果SHAPE = 1
X如果SHAPE = 10
要不然ÿ

我正在使用條件來分割基於SHAPE的表,然後我使用10-15「複製列」轉換將舊列(dB4D)並將其映射到新列(B4,B3,X等)。

其中一些列「重疊」。例如,我有多個傳統列(dB4D,dB3D,dB2D,dB1D,dC1D,dC2D等)和多個新列(A,B,C,D等)。在 「複製列」(由SHAPE分解)之一,我能有這樣的:

如果SHAPE = 10

+--------------+--------------+ 
| Input Column | Output Alias | 
+--------------+--------------+ 
| dB4D   | B   | 
+--------------+--------------+ 

如果SHAPE = 5

+--------------+--------------+ 
| Input Column | Output Alias | 
+--------------+--------------+ 
| dB4D   | C   | 
+--------------+--------------+ 

我現在需要將這些全部集中到一個最終的臨時表(或「目的地」)。兩行不會有相同的大小,所以沒有衝突。但我需要根據另一列中的值將dB4D(和其他列)映射到不同的新列。我試圖合併它們,但不能合併多個數據源。我試圖加入它們,但並不是所有列(或輸出別名)都會顯示在目標中。任何人都可以推薦如何解決這個問題?

這是當前設計,可以幫助:

http://i.imgur.com/Z9HVLyP.png

回答

0

由於輸入數據流,您有一組列dB4D,dB3D,dB2D的等

您的目的地就只有源數據中不存在的列名稱。

基於Shape列,您可以將dB列投影到目標表的不同映射中。

如果條件分割邏輯有意義,請不要嘗試將它全部重新組合在一起。相反,只需連接8個OLE DB目標。你會可能不得不將他們從「快速加載」選項更改爲表名稱選項。這意味着它將執行單例插入,因此希望數據量不會成爲問題。如果是,則創建8個臨時表,您使用「快速加載」選項,然後對數據流執行後續任務,以執行基於集合的插入到最終表中的操作。

聯盟所有組件遇到的挑戰是,如果您對源進行任何更改,聯盟所有人很少會接受更改(將列從varchar更改爲int,對不起!)。