下面是可能給你的,你可以做些什麼的想法的例子。理想情況下,在SSIS包或任何ETL作業中,您應該考慮到數據可能並不完全符合您的期望。您需要採取適當的措施來處理可能會立即彈出的錯誤或無效數據。這就是爲什麼SSIS在數據流任務中提出了許多轉換任務,您可以利用它來清理數據。
對您而言,您可以利用Derived Column
轉型或Data conversion
轉型來實現您的要求。
的例子是在SSIS 2008 R2
創建。它顯示瞭如何讀取包含日期的平面文件並加載到SQL表中。
我創建了一個簡單的SQL表導入平面文件數據。
在SSIS包,我有一個連接管理器SQL和一個平面文件。平面文件連接的配置如下所示。
在SSIS包,我置於控制流選項卡上的數據流任務。在數據流任務裏面,我有一個平面文件源,派生列轉換和一個OLE DB目標。由於Flat文件源和OLE DB目標很簡單,我將把它們留在這裏。Derived轉換創建了一個新列,其表達式爲(DT_DBDATE)SmallDate
。請注意,您也可以使用數據轉換轉換來執行相同的操作。這個新的SmallDateTimeValue列應該映射到OLE DB Destination中的數據庫列。
如果執行這個包,它會失敗,因爲不是所有的文件中的值是有效的。
爲什麼它在你的情況下,失敗的原因是無效的數據直接插入到表中。在你的情況下,這個表會拋出一個異常使得程序包失敗。在此示例中,程序包失敗,因爲Derived列轉換的默認設置是在組件發生錯誤時使組件發生故障。因此,我們放置一個虛擬變換來重定向錯誤行。我們將爲此目的進行多播轉換。它不會做任何事情。理想情況下,您應該使用您選擇的OLE DB目標或其他目標組件將錯誤行重定向到另一個表,以便分析導致錯誤的數據。
拖動派生轉換中的紅色箭頭並將其連接到組播轉換。這將彈出「配置錯誤輸出」對話框。將錯誤和截斷列下的值從失敗組件更改爲Redirect row
。這會將任何錯誤行重定向到組播轉換,並且不會進入表中。
現在,如果我們執行這個包,它會成功運行。請注意每個方向顯示的行數。
這裏是鑽進了表中的數據。只有2行是有效的。您可以查看顯示文件中數據的第一個屏幕截圖,您可以看到只有2行是有效的。
希望能給你一個想法,在SSIS包中實現你的需求。
屏幕截圖非常棒,+1 – eddiegroves