如何通过shell /终端将带有600MB xml文件(超过300,000“<”abc:ABCRecord“>”)的50MB zip文件上传到mysql数据表中? xml文件本身具有以下结构:
<?xml version='1.0' encoding='UTF-8'?>
<abc:ABCData xmlns:abc="http://www.abc-example.com" xmlns:xyz="http:/www.xyz-example.com">
<abc:ABCHeader>
<abc:ContentDate>2015-08-15T09:03:29.379055+00:00</abc:ContentDate>
<abc:FileContent>PUBLISHED</abc:FileContent>
<abc:RecordCount>310598</abc:RecordCount>
</abc:ABCHeader>
<abc:ABCRecords>
<abc:ABCRecord>
....
</abc:ABCRecord>
</abc:ABCRecords>
</abc:ABCData>
mysql表如何看起来像是什么?shell命令是什么?目标是在表中包含所有abc标记的内容。此外,每天都会有一个新的zip文件通过下载链接提供,它应该每天更新表格。 zip文件以以下结构命名:“20150815-XYZ-concatenated-file.zip”。总共有超过300,000“&lt;”abc:Record“&gt;”。
答案 0 :(得分:0)
考虑使用MySQL的LOAD XML INFILE快速批量导入过程(类似于LOAD DATA INFILE查询),执行以下步骤:
1)解压缩zip文件。
2)使用XSLT转换原始xml以匹配MySQL所需的格式,不带属性或嵌套节点。子元素必须对应于MySQL数据库表字段:
<row>
<column1>data</column1>
<column2>data</column2>
<column3>data</column3>
...
</row>
对于上面的例子:
<record>
<ABC>5967007L</ABC>
<Name>REGISTERENHETEN I Bornheim</Name>
<Line1>Havnegata 48</Line1>
<City>Bornheim</City>
<Country>NO</Country>
</record>
3)最后,将以下查询保存在 .sql 文件中,并在shell / terminal中使用source
命令调用它:
LOAD XML LOCAL INFILE 'C:\Path\To\transformedFile.xml'
INTO TABLE person
ROWS IDENTIFIED BY '<record>';
使用日常脚本调度程序(crontab,windows任务调度程序等)处理上述步骤可能是最好的专用编程语言(PHP,Python,Java,C#,VBA)。