2009-07-01 312 views
1

我的SSIS程序讀取.csv文件的輸入。SSIS從平面文件中讀取問題

該文件有大約60,000行。而且我的SSIS包在讀取過程中失敗了,說由於潛在的數據丟失,無法轉換某個列。

現在,我確定大多數行都是正確的。正如我試圖粘貼文件的隨機子集和SSIS讀取正常。

但我找不出一種方法來確定我的軟件包在哪一行失敗。

我已經花了2個月在這個問題上,有什麼建議嗎?

回答

5

你可以找到16個迭代的第一個罪魁禍首。這裏是一個大腦+布朗方法:

第一:支持一切。在安全的地方複製備份。對不起,明顯的狀態,但我最近被咬傷,而我知道更好。

帶有60K記錄的文件 - 我們稱之爲您的基本文件。

  1. 分割的基本文件成兩個文件(FILEA,FILEB)
  2. 使用其中一個作爲輸入。
  3. 運行SSIS - 如果SSIS失敗,使用FILEA你的基地文件 - 使用其他如FILEB基本文件
  4. 轉到步驟1

你將不得不在16次迭代的違規記錄。 (60k,30k,15k,7500,3750,1875,937,468,234,117,58,29,14,7,3,1)

打開所有內容並重新運行SSIS包。您應該在基本文件中記錄有問題的記錄,並在日誌中記錄確切的數據點。

0

首先,簡化問題。創建一個僅使用此平面文件源和一些虛擬目標的數據流任務。注意失敗。

打開日誌中的所有日誌和頁面。關閉你發現的記錄區顯然毫無價值,然後再運行一次。

此外,您應該配置源和/或目的地的錯誤輸出:無論哪個給您提供錯誤。將錯誤的行發送到您可以在運行後查看的單獨目標。

0

大多數情況下,當我運行這個數據時,數據比預期的要長(即試圖將60個字符的字符串放入varchar(50)字段中),或者它是一個數字精度可能會丟失(即,將26.5整合到整數字段中,或將26.55整合到只允許一個小數位的數字字段中)。

0

設置DefaultBufferMaxRows = 1

這將讀取並處理每行一個接一個,並在該行會失敗,它的具有轉換的問題。

沒有必要通過拆分文件來手動執行此操作。