我正在尝试获取正确的xpath来查询包含在Hive表中名为Message的列中的字符串的xml数据。 xml来自内部系统的日志文件,我需要从数据中提取特定数据。
为了简化这个过程,我尝试提取第一组数据以确保我有正确的xml xpath,但在创建视图并执行查询后,我得到空值。
下面是我正在运行的数据和Hive查询的示例,用于创建视图以仅提取“SessionKey”开始。
<AddOnlineToTrolley xmlns="http://tempuri.org/">
<accountSession
xmlns:b="http://schemas.datacontract.org/2004/07/ApplicationServices.DataContracts.Common"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:SessionKey>d472046f-fa15-4cf5-bbf0-ee35bdde28f4</b:SessionKey>
<b:SessionToken i:nil="true"/>
</accountSession>
<OnlineProducts
xmlns:b="http://schemas.datacontract.org/2004/07/ApplicationServices.DataContracts.Common"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<b:OnlineProducts i:type="b:OnlineProductsCat">
<b:AddToFavourites>true</b:AddToFavourites>
<b:WeekDay>5</b:WeekDay>
<b:ItemCount>1</b:ItemCount>
<b:OrderOffset>0</b:OrderOffset>
<b:FavouriteName>WeeklyPurchase</b:FavouriteName>
<b:FirstOrderNumber>12505</b:FirstOrderNumber>
<b:ProductId>312</b:ProductId>
<b:Method>1</b:Method>
</b:OnlineProducts>
</OnlineProducts>
</AddOnlineToTrolley>
Hive查询
DROP VIEW AddOnlineToTrolley;
CREATE VIEW AddOnlineToTrolley(SessionKey)
AS SELECT
xpath_string (message, '/AddOnlineToTrolley/accountSession[1]/*[namespace- uri()=\'http://schemas.datacontract.org/2004/07/ApplicationServices.DataContracts.Common\' and local-name()=\'SessionKey\'][1]'/'SessionKey')
FROM onlineproductimport;
Select * from AddOnlineToTrolley;
还尝试了一些直接查询表的xpath语句,我仍然得到空值
xpath(message, '/*[local-name()=\'AddOnlineToTrolley\']')
最终目标是创建一个人们可以用来查询和选择上面xml中的数据的视图,但我的优势不是Xpath或XML
查看以包含以下内容: