我有一些 XML 文件,其中包含一个研究项目的数据,我需要对其进行一些统计。数据量接近100GB。
结构并没有那么复杂(可以映射到关系模型中的也许10个表),并且考虑到问题的性质,这些数据永远不会再次更新,我只需要它在易于运行的地方可用询问。
我读过有关 XML 数据库的内容,以及在其上运行 XPATH 样式查询的可能性,但我从未使用过它们,而且对它不太满意。将数据存储在关系数据库中将是我的首选。
因此,我正在寻找一种方法将存储在 XML 中的数据转换为关系数据库(想象一个类似于
mysqldump
生成的大 .sql 文件,但其他任何东西都可以)。
最终目标是能够运行 SQL 查询来处理数据。
经过一番研究,我几乎确信我必须自己写它。 但我觉得这是一个常见问题,因此应该有一个工具已经可以做到这一点。
那么,您知道有什么工具可以将 XML 数据转换为关系数据库吗?
PS1:
我的想法是这样的(它可以以不同的方式工作,但只是为了确保你明白我的观点):
PS2:
我在这里看到了一些帖子,但我仍然找不到解决方案。 Microsoft 的“Xml Bulk Load”工具似乎在这个方向上做了一些事情,但我没有 MS SQL Server。
将 XML 文件正确的格式导入 MySql 数据库非常简单:
https://dev.mysql.com/doc/refman/5.6/en/load-xml.html
这意味着,您通常必须将 XML 数据转换为这种格式。如何执行此操作取决于转换的复杂性、您了解的编程语言以及您是否想使用 XSLT(这很可能是一个好主意)。
从您之前的回答来看,您似乎了解Python,因此http://xmlsoft.org/XSLT/python.html可能是您开始的正确选择。
看看 StAX 而不是 XSD 来分析/提取数据。它是基于流的,可以处理巨大的 XML 文件。
如果您对 Perl 感到满意,我很幸运使用
XML::Twig
模块来处理非常大的 XML 文件。
基本上,您所需要的只是设置一些树枝处理程序并使用
DBI
/DBD::mysql
将数据导入 MySQL。
在 xmltwig.org 上有很好的例子。
如果您熟悉商业产品,您可能想看看 SQL Maestro Group 的 Data Wizard for MySQL。
该应用程序特别针对从 MySQL 数据库导出数据以及将数据导入到 MySQL 数据库。这还包括 XML 导入。您可以下载 30 天试用版来检查这是否是您想要的。
我必须承认,我还没有使用过他们的 MySQL 产品线,但是他们的 Firebird Maestro 和 SQLite Maestro 产品给我带来了很好的用户体验。
如果几年后对某人有用,您可以使用Python包xml2db。它的作用正是您在原始问题中所描述的:
对于大多数模式来说,它应该是开箱即用的,不需要手动编写映射。包文档解释了如何将 XML 加载到关系数据库。
我要补充的一个警告是,它当前解析内存中的 XML 文件,因此它不适用于巨大的单个文件(在原始问题中并不清楚要加载的文件的单个大小是多少)。