2017-01-02 85 views
0

我正試圖從平面文件中加載數據。該文件大小約爲2.5 GB,行數接近10億。我在DFT中使用平面文件源。文件中的幾行不遵循列模式,例如有一個額外的分隔符或者說文本限定符作爲一列的值。我想跳過這些行並加載具有正確格式的行的其餘部分。我正在使用SSIS 2014.DFT內的平面文件源失敗。我已將alwaysCheckforrowdelimiter屬性設置爲false,但仍然不起作用。由於文件太大,手動打開和更改是不可能的。請幫助。從ssis中的平面文件跳過錯誤行

+0

如果這是一次性的,我建議你使用腳本(VBScript中,PowerShell中,無論)通過文件進行搜索,並事先進行清潔。 –

+0

謝謝..但包含接近億行的文件的腳本很耗時。這將成爲日常計劃工作的一部分,需要在特定時間內完成。 –

+0

你確定它會很耗時嗎?對於十億行,可能需要大概半個小時?在SSIS中做這件事的問題是,如果你有太多的分隔符,它可能不會識別它 - 它可能只是洗掉剩下的1個位置。無論如何,你可能想要考慮它。 –

回答

0

我和Nick.McDermaid有同樣的想法,但我可以幫助你多一點。 您可以使用正則表達式清理文件。 (在腳本中)

你只需要定義一個正則表達式來匹配行數與你想要的分隔符的數量。其他行應刪除。

這裏是在記事本++執行的視覺示例

Notepad++ Example screenshot

這裏是用於我的例子的模式:

^[A-Z]*;[A-Z]*;[A-Z]*;[A-Z]*$ 

並且數據樣本:

AA;BB;CC;DD 
AA;BB;CC;DD 
AA;BB;CC;DD;EE 
AA;BB;CC;DD 
AA;BB;CC 
AA;BB;CC;DD 
AA;BB;CC;DD 

您可以在線試用:https://regex101.com/r/PIYIcY/1

問候, 阿爾諾