我正在处理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'?>"}
答案 0 :(得分:6)
您有几种选择:
CREATE TABLE xmlfiles (id int, xmlfile string)
。然后使用XPath UDF处理XML。//section1
),请按照this tutorial后半部分中的说明通过XPath直接摄取到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工作