如何将xml文件加载到Hive中

时间:2013-12-31 05:22:07

标签: xml hadoop hive

我正在处理Hive表,我有以下问题。我的HDFS中有超过10亿个xml文件。我想要做的是,每个xml文件有4个不同的部分。现在我想为每个xml文件分割并加载每个表中的每个部分

示例:

            <?xml version='1.0' encoding='iso-8859-1'?>

            <section1>
                <id> 1233222 </id>
               // having lot of xml tages 
            </section1>

            <section2>
               // having lot of xml tages 
            </section2>

            <section3>
               // having lot of xml tages 
            </section3>

            <section4>
               // having lot of xml tages 
            </section4>

            </xml>

我有四张桌子

        section1Table

        id       section1    // fields 

        section2Table

        id       section2

        section3Table 

        id       section3

        section4Table

        id       section4

现在我想将数据拆分并加载到每个表中。

我怎样才能做到这一点。任何人都可以帮助我

谢谢

更新

我试过以下

CREATE EXTERNAL TABLE test(name STRING) LOCATION '/user/sornalingam/zipped/output/Tagged/t1';\


SELECT xpath (name, '//section1') FROM test LIMIT 1 ;

但我收到以下错误

java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"name":"<?xml version='1.0' encoding='iso-8859-1'?>"}

3 个答案:

答案 0 :(得分:6)

您有几种选择:

  • 将XML加载到带有字符串列的Hive表中,每行一个(例如CREATE TABLE xmlfiles (id int, xmlfile string)。然后使用XPath UDF处理XML。
  • 由于您知道所需的XPath(例如//section1),请按照this tutorial后半部分中的说明通过XPath直接摄取到Hive。
  • 按照here所述将您的XML映射到Avro,因为存在SerDe以实现无缝的Avro-to-Hive映射。
  • 使用XPath将数据存储在HDFS中的常规文本文件中,然后将其摄取到Hive中。

这取决于您使用这些方法的经验和舒适度。

答案 1 :(得分:0)

使用此:

CREATE EXTERNAL TABLE test(name STRING) LOCATION '/user/sornalingam/zipped/output/Tagged/t1'

tblproperties ("skip.header.line.count"="1", "skip.footer.line.count"="1");

然后使用xpath函数

答案 2 :(得分:0)

您可以自动执行将复杂XML转换为Hive的整个过程,例如Flexter XML converter可以生成可由Hive查询的Parquet或Avro文件。

以下是一篇博文,介绍如何自动化conversion of MISMO XML to Hive and Parquet

免责声明:我为Sonra工作