java—解析大型xml文件并动态生成sql表

tyu7yeag  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(478)

我有一个庞大复杂的xml文件,从中可以生成xsd/数据库表。因为它是一个巨大的文件,所以我在hadoop场景中查看它。我检查了许多处理xml的方法(在hadoop中),例如:
将xml转换为avro格式
使用mahout xmlinputformat
重写map reduce的recordreader类
使用oracle xmlextension将xml直接加载到配置单元表,但是。。我们所有上述方法都需要手动硬编码xml标记/元素。例如,考虑foo.xml

<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>

在上面列出的所有方法中,硬编码标签“customer report,customer,customer name….”是必要的。但是在我们的例子中,标签不应该手动给出。
由于xml中有嵌套的标记,我们可能需要在db中创建多个表,并且还需要依赖关系。我们不知道如何处理嵌套结构和动态设计数据库。

slwdgvem

slwdgvem1#

oracle表适配器非常擅长拆分大型xml文件:http://docs.oracle.com/bigdata/bda49/bdcug/oxh_hive.htm#bdcug694
其他类似的解决方案使用字符串匹配或正则表达式来提取拆分的xml元素。这种技术容易出错,可能会导致无意中跳过文档中的数据。oracle的解决方案使用扫描和流解析的组合来识别分割的元素。因此,它速度很快,可以处理更多的用例。
下载位置:http://www.oracle.com/technetwork/database/database-technologies/bdc/big-data-connectors/downloads/index.html
(xquery for hadoop的一部分)

相关问题