我有一个大型XML文件需要导入并解析为SQL Server中的表格结构(" flatten")。通过"大"我的意思是一个大约450 MB的文件,包含多达6-7个嵌套级别和大量元素,约300个。
我尝试使用 OPENXML 和 Xml.Nodes 解析文件。这两种方法都很慢。读取父元素及其嵌套的孙子元素的部分查询,如果不是几十个,则需要几分钟才能运行。
我尝试使用SQLXML Bulk Load方法。不幸的是我无法 - 因为文件没有正确结构化。有一个元素在逻辑上是一个父元素,它不是物理上嵌套的父元素。
你认为唯一的posiblle解决方案是使用.NET还是Java?我有什么遗失的吗?
在某种程度上,我非常喜欢动态解决方案。我不希望SQL Server开发人员在他们无法控制/知识的程序性编译代码上进行转发 - 如果发生某些更改(在XML结构中)。
非常感谢。
答案 0 :(得分:1)
行。我在XML数据列上创建了一个XML索引。 (现在只是一个主要的)。
大约需要4分30秒的查询需要~9秒!似乎存储具有适当XML索引的XML并使用xml.nodes()函数解析数据的表是可行的解决方案。
谢谢大家。
答案 1 :(得分:0)
由于您需要表格结构,因此您可以将XML转换为CSV文件(使用this java或this .NET tool,甚至an XSLT tranformation),然后perform a bulk insert。< / p>
当然,所有这些都取决于您的XML是否正确形成。
答案 2 :(得分:0)
好吧,首先我不明白你为什么要使用OpenXml来加载文件。我很确定这样做会在内部根据OpenXml ISO标准触发一大堆有效性测试。
但是 - Xml.Nodes()(我认为这意味着DOM加载数据的方式) - 是迄今为止加载和解析Xml数据的最慢方式。请考虑使用XmlReader或类似的SAX approach。我确实知道这篇文章是从2004年开始的 - 但它仍然很好地解释了这些东西。