解析大型XML文件并动态生成SQL表

时间:2015-04-09 12:41:28

标签: java xml hadoop xsd avro

我有一个巨大的复杂xml文件,从中生成xsd / database-tables。由于它是一个巨大的文件,我在Hadoop场景中查看它。 我已经检查了许多处理XML的方法(在hadoop中),如:

  1. 将XML转换为AVRO格式
  2. 使用Mahout XMLInputFormat
  3. 覆盖Map Reduce的RecordReader类
  4. 使用Oracle XMLextension将XML直接加载到Hive表 但是..我们所有上述方法都需要手动硬编码xml标签/元素。 例如考虑foo.xml
  5.  <CustomerReport>
         <Customer>
          <CustomerName>DKIJzuUG</CustomerName>
          <CustomerStatus>active</CustomerStatus>
          <age>70</age>
          <gender>female</gender>
          <AquistionChannel>uBeApXji</AquistionChannel>
          <State>MZlNWI</State>
          <HouseholdIncome>0506</HouseholdIncome>
          <Revenue>54961</Revenue>
          <PurchaceOrders>
           <PurchaceOrder>
            <PurchaceOrderName>qkiHEH</PurchaceOrderName>
            <purchasedOn>02-01-2014</purchasedOn>
            <amount>899</amount>
           </PurchaceOrder>
          </PurchaceOrders>
                 ......
         </Customer>
        </CustomerReport>
    

    在上面列出的所有上述方法中 - 标签的硬编码&#34;客户报告,客户,客户名称......&#34;有必要的。但在我们的例子中,标签不应该手动给出。

    由于xml中存在嵌套标记,我们可能必须在db中创建多个表并且还具有依赖关系。我们不知道如何处理嵌套结构和动态设计数据库。

1 个答案:

答案 0 :(得分:0)

Oracle表适配器非常擅长拆分大型XML文件: options

其他类似的解决方案使用字符串匹配或正则表达式来提取拆分的XML元素。这种技术容易出错,并且可能导致无意中跳过文档中的数据。 Oracle的解决方案使用扫描和流分析器的组合来识别分裂元素。因此,它很快并且处理更大类的用例。

下载在这里: http://docs.oracle.com/bigdata/bda49/BDCUG/oxh_hive.htm#BDCUG694

(Hadoop的XQuery的一部分)