【问题标题】:How do I upload a 50MB zipped xml file (with namespaces & full size 600MB) into a mysql table via shell/terminal如何通过 shell/终端将 50MB 压缩 xml 文件(带有命名空间和完整大小 600MB)上传到 mysql 表中
【发布时间】:2015-11-13 21:35:51
【问题描述】:

如何通过 shell/终端将 50MB 的 zip 文件和 600MB 的 xml 文件(超过 300,000 "")上传到 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 个 ""。

【问题讨论】:

    标签: mysql xml shell terminal


    【解决方案1】:

    考虑使用 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/终端中使用 source 命令调用它:

    LOAD XML LOCAL INFILE 'C:\Path\To\transformedFile.xml'
    INTO TABLE person
    ROWS IDENTIFIED BY '<record>';
    

    一种专用的编程语言(PHP、Python、Java、C#、VBA)可能最好使用日常脚本调度程序(crontab、windows 任务调度程序等)来处理上述步骤。

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 2021-10-06
      • 1970-01-01
      • 2019-11-18
      • 2011-08-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      相关资源
      最近更新 更多