使用xpaths查询Hive表中的数据

时间:2014-07-07 06:59:20

标签: xml hadoop xpath hive

我正在尝试获取正确的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

查看以包含以下内容:

  • SessionKey
  • OnlineProducts
  • AddToFavourites
  • 平日
  • ItemCount中
  • OrderOffset
  • FavouriteName
  • FirstOrderNumber
  • 产品编号
  • 方法

0 个答案:

没有答案