在Biztalk 2006中从非常大的CSV文件导入少量记录

在Biztalk 2006中从非常大的CSV文件导入少量记录,biztalk,flat-file,biztalk2006r2,Biztalk,Flat File,Biztalk2006r2,我有一个Biztalk项目,它导入传入的CSV文件并将其转储到数据库表中。导入工作正常,但我只需要从一个包含100多万行的文件中保留大约200-300条记录。我的编排丢弃了这些行,但问题是我导入的平面文件仍然是250MB,当使用常规平面文件管道将其转换为XML时,处理需要几个小时,有时会导致服务器内存不足 我能做些什么让自定义管道本身丢弃我不关心的行吗?每个CSV行中的第一项是几个字符串中的一个,我只想保留以某个字符串开头的行 感谢您提供的帮助。定制管道组件肯定是最好的解决方案;但它需要在反汇编

我有一个Biztalk项目,它导入传入的CSV文件并将其转储到数据库表中。导入工作正常,但我只需要从一个包含100多万行的文件中保留大约200-300条记录。我的编排丢弃了这些行,但问题是我导入的平面文件仍然是250MB,当使用常规平面文件管道将其转换为XML时,处理需要几个小时,有时会导致服务器内存不足

我能做些什么让自定义管道本身丢弃我不关心的行吗?每个CSV行中的第一项是几个字符串中的一个,我只想保留以某个字符串开头的行


感谢您提供的帮助。

定制管道组件肯定是最好的解决方案;但它需要在反汇编组件之前的解码阶段执行


使其100%启用流将是复杂的(但肯定是可行的),但根据生成的修剪CVS文件的大小,您可以在自定义组件运行后立即对整个输入文件进行预处理,并在内存中生成结果(在MemoryStream中),如果它很小,或者将它们写入文件,然后将生成的FileStream返回BizTalk,以便从那里继续处理。

我正在预先处理整个文件,但它仍然是CSV—我认为是转换为XML(以及随后解析交给我的编排的XMLDocument对象)造成了麻烦。如果管道可以将其裁剪为只包含我想要的行,那么生成的XML文档将低于1MB,而不是250MB,那么在内存中这样做当然是可能的。真的不难;组件的核心只需要在主体流的顶部创建一个StreamReader,逐行读取并丢弃不匹配的行,将匹配的行写入第二个流,然后将该流向下传递。