我需要使用SSIS将单个大型(40GB +)XML文件加载到SQL Server 2012数据库表中。我遇到了问题,因为SSIS似乎试图将整个文档加载到内存而不是流式传输。
以下是我的SSIS包的更多细节。
我创建了一个具有以下属性的XML Source:
XML结构很简单,只有3个层次级别:
我需要为每个叶元素插入一个数据库记录,重复较高层次结构级别的字段。换句话说,我需要展开XML层次结构。
如何让SSIS流加载数据,而不是尝试将整个文档加载到内存中?
答案 0 :(得分:4)
XML源始终加载整个文件。它使用XmlDocument
来执行此操作(最后我检查过)。
你唯一能做的就是以某种方式拆分文件,然后在数据流中迭代运行每一段文件。
除此之外,您正在考虑创建自定义数据源,这并非易事。它也代表了一段需要维护的严肃代码。
可能有第三方数据源可以执行此操作。大约五年前我不得不写自己的。
答案 1 :(得分:1)
您是否考虑过以较小的块处理文件?
之前我遇到了同样的问题所以我创建了一个脚本组件来处理这个1个大的XML文件到100个较小的XML文件中然后执行forloop并迭代所有较小的XML文件来处理。
要做到这一点,你不能使用StreamReader.ReadLine
,因为它仍然会做同样的事情,加载那个非常大的文件,而不是使用System.IO.MemoryMappedFiles
这个场景的设计类。
在这里查看http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile.aspx