解析XML并存储在Hive表中

时间:2016-12-23 10:50:19

标签: xml xpath hive apache-pig

我正在使用 XPath 使用 pig 解析XML,但在我的用例中,我必须解析整个xml文件并将其移至 hive 表。我正在考虑使用XPath来解析XML文件,而不是使用pig将解析后的数据移动到hive表。但还有其他方法吗?

1 个答案:

答案 0 :(得分:4)

我们可以使用hivexmlserde解析Hive中的XML文件。

使用hivexmlserde创建外部Hive表,并将所有xml文件放在该xml位置(所有xml文件应该类似)。使用此serde,您需要在create table语句和要获取的属性的XPath中定义开始和结束标记。

请参阅下面的示例。

add jar /home/udf_jars/hivexmlserde-1.0.5.3.jar;
CREATE EXTERNAL TABLE hive_test_xml(
col1            string,
col2            string,
col3            string
)
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe'
WITH SERDEPROPERTIES (
"column.xpath.col1"="/Books/col1/text()",
"column.xpath.col2"="/Books/col2/text()",
"column.xpath.col3"="/Books/col3/text()"
)
STORED AS
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat'
LOCATION ' /user/user1/xml/data'
TBLPROPERTIES (
"xmlinput.start"="<Books",
"xmlinput.end"="</Books>");

有关详情,请访问Hive-XML-Options链接了解详情。

更新:如何从表中选择数据。

您需要在查询之前添加hivexmlserde-1.0.5.3.jar。请参阅下面的示例。

hive> add jar /path/to/jar/hivexmlserde-1.0.5.3.jar;
Added [add jar /path/to/jar/hivexmlserde-1.0.5.3.jar] to class path
Added resources: [add jar /path/to/jar/hivexmlserde-1.0.5.3.jar]
hive> use mydatabase_name;
OK
Time taken: 0.021 seconds
hive> select * from xm_table;

您还可以永久设置此jar,以避免在查询前一直添加。请点击以下链接

Adding/Defining Jars in Hive permanently