自动将10 GB XML文件导入SQL Server

时间:2014-06-24 06:35:39

标签: sql-server

我每天从供应商处获得一个10 GB的XML文件,并希望将该文件导入SQL Server表。 什么是正确的方法?

1 个答案:

答案 0 :(得分:1)

这是一个很老的XML文件。我就是这样做的,在最近的一个项目中,我收到了相当大的文件用于导入。

首先我要确保我收到的文件是zip文件或gzip文件,我在java中这样做,但可以在python或C#中完成。然后我在流中解压缩(不是一次整个文件,只是从压缩流中读取)。

然后我将在流式解析器中解析该文件。在java中,我使用STaX,但在其他语言中,可以使用其他选项。然后,当我读取XML时,我将收集数据并将其写入CSV(制表符分隔)文件,这些文件可以传递给bcp.exe。

我不确定您的数据结构,但也许您可以将其放在一个CSV文件中,或者您可能需要多种类型的CSV文件。无论哪种方式,我都会尝试不创建大于50MB的CSV。然后,一旦CSV文件的gona超过大小阈值,我就关闭它并将其传递给另一个线程并继续进行XML解析。

在第二个线程中,我们将它们分叉到bcp.exe以加载数据。

如果您需要加载到多个表,您仍然可以通过一个CSV文件,然后BCP进入视图并在视图上使用“而不是插入触发器”。此触发器可以规范化数据并查找主键并插入子表等。

如果您是在C#中执行此操作,那么可能您不需要使用bcp.exe作为natice批量加载它比java API更好。

这种转换为分块CSV,并行上传,使用触发器进行查找的整体方法对我们来说非常有效。

我的版本采用了6GB的XML文件夹,分布在数百个文件中,并在几分钟内加载到数据库中。这是4个表,但是使用一个带有所有列的联合的CSV文件。