解析 XML 并存储在 Hive 表中

Posted

技术标签:

【中文标题】解析 XML 并存储在 Hive 表中【英文标题】:Parse XML and store in Hive table 【发布时间】:2016-12-23 10:50:19 【问题描述】:

我正在使用 XPath 使用 pig 解析 XML,但在我的用例中,我必须解析整个 xml 文件并将其移动到 hive强>表。我正在考虑使用 XPath 来解析 XML 文件,而不是使用 pig 将解析后的数据移动到配置单元表中。但是有没有其他方法可以做到这一点?

【问题讨论】:

能否提供示例xml文件? @SandeepSingh 实际上它对我的公司来说是机密的,而且还有非常敏感的数据,所以我不能分享它。您可以将其视为 30000 行 XML 数据。 我能理解。您可以使用 Hive 和 XPath 解析 XML 文件。根据这些信息,我可以提出一个答案。请看下面。 【参考方案1】:

我们可以在 Hive 中使用 hivexmlserde 解析 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

【讨论】:

非常感谢您的帮助。 我有一个问题可以将我的所有 xml 文件放在同一文件夹中的一个位置,例如 LOCATION ' /user/user1/xml/data/' 其中 data 是我的文件夹名称吗? 是的,你可以放,如果所有的xml文件都具有相似的结构。 非常感谢您的帮助。 由于您的表是外部表,您只需将其他xml文件复制到表HDFS位置。无论那里有什么文件,都会反映到那个特定的表中。

以上是关于解析 XML 并存储在 Hive 表中的主要内容,如果未能解决你的问题,请参考以下文章

PLSQL:将数据从 XML 解析并插入到表中

xml解析和存储数据

Spark&Hive:如何使用scala开发spark作业,并访问hive。

使用 hive 解析 XML 中的多次出现问题

在 php 中解析 solr 响应并在 html 表中显示它们

在 SQL Server 的存储过程中解析 XML 并输出