我需要使用 SSIS 将单个大型 (40GB+) XML 文件加载到 SQL Server 2012 数据库表中。我遇到了问题,因为 SSIS 似乎试图将整个文档加载到内存中而不是流式传输。
这是我的 SSIS 包的更多详细信息。
我创建了一个具有以下属性的 XML 源:
- 数据访问模式:来自变量的 XML 文件(但可以是 XML 文件位置)
- 变量名称:指定我的计算机中的 XML 文件路径的变量。
- XSD 位置:定义正在读取的 XML 的 XSD 路径。
XML 结构很简单,只有 3 个层次结构级别:
- 带有 header 信息的根元素
- 一级定义对象集合
- 定义各个对象的叶级别(每个对象都有一组固定的字段)
我需要为每个叶元素插入一条数据库记录,重复较高层次结构级别的字段。换句话说,我需要展平 XML 层次结构。
如何让 SSIS 流加载数据,而不是尝试将整个文档加载到内存中?
最佳答案
XML 源始终加载整个文件。它使用 XmlDocument
来执行此操作(我上次检查过)。
您唯一能做的就是以某种方式拆分文件,然后通过数据流迭代运行每个部分。
除此之外,您还需要创建自定义数据源,这并非易事。它还代表了一段需要维护的重要代码。
可能有第三方数据源可以执行此操作。大约五年前我不得不自己写一个。
关于sql-server - SSIS 使用太多内存将大型 (40GB+) XML 文件加载到 SQL Server 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20551316/