如何将XML文件加载到Hive中

3
我正在处理Hive表,遇到了以下问题。我在HDFS中有超过10亿个XML文件。我的目标是将每个XML文件中的4个不同部分分割并加载到每个表中。

例如:

            <?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'?>"}
2个回答

6
你有几个选项:
  • 将XML加载到Hive表中,每行一个字符串列(例如CREATE TABLE xmlfiles(id int,xmlfile string))。然后使用XPath UDF在XML上进行操作。
  • 由于你知道要获取的XPath(例如//section1),因此按照此教程的第二部分说明直接通过XPath摄入到Hive中。
  • 根据这里的说明将你的XML映射到Avro,因为存在SerDe可无缝地将Avro映射到Hive。
  • 使用XPath将数据存储在HDFS的常规文本文件中,然后将其摄入到Hive中。

选择哪种方法取决于你的经验和舒适度。


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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接