【问题标题】:Import small number of records from a very large CSV file in Biztalk 2006在 Biztalk 2006 中从一个非常大的 CSV 文件导入少量记录
【发布时间】:2010-04-07 19:20:16
【问题描述】:

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

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

感谢您提供的任何帮助。

【问题讨论】:

    标签: biztalk flat-file biztalk2006r2


    【解决方案1】:

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

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

    【讨论】:

    • 当它仍然是 CSV 时,我可以预先处理整个文件 - 我认为是转换为 XML(以及随后解析交给我的编排的 XMLDocument 对象)造成了麻烦.如果管道可以修剪它以仅包含我想要的行,则生成的 XML 文档将小于 1MB 而不是 250MB-ish
    • 那么在内存中做这件事听起来是可能的。真的不难;组件的核心只需要在主体流之上创建一个 StreamReader,逐行读取并丢弃不匹配的行,将匹配的行写入第二个流,然后将该流向下传递。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2013-05-17
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多