我有一个xml文档,如下所示:
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
在Hive上,我可以使用 xpath
使用以下命令检索xml文档中每个节点的文本: select xpath(xml_text,'//*[name()='note']//text()') from table_test;
但是,我不知道在配置单元上使用哪个xpath命令来检索文本的xml节点名对于上面的示例,我希望能够返回 ["to","from","heading","body"]
,表示xml文件中标记的xml节点。感谢您的帮助。
1条答案
按热度按时间w7t8yxp51#
一般来说,你只能使用
xpath
获取文本或元素属性-而不是节点的名称。因此,有两种选择:您可以编写(或在线查找)一个自定义udf,用于返回给定xpath的节点名称。
或者,你可以用这个黑客:
说明:它将nodename属性添加到任何xml元素中(
<to> -> <to nodename='to'>
)它也可以在一些文本中添加它,但是由于您只提取nodename
属性-这不重要。顺便说一下,您可以将文本查询重写为:
select xpath(xml_text,'note/*/text()') from table_test;