2017-01-02 86 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

问候, 阿尔诺