我每天从供应商处获得一个10 GB的XML文件,并希望将该文件导入SQL Server表。 什么是正确的方法?
答案 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文件。