2016-11-07 8 views
0

Я создаю внешнюю таблицу улья из xml. Я хочу вытащить значение элемента, в котором максимальная отметка времени. Как написать это в инструкции Create Table?Xpath to pull Максимальное значение, когда есть несколько совпадений

Мой XML:

<Parent> 
    <Child> 
     <Purchase value ="100" id ="350" timestamp="2016-10-08T14:22:31.0000000"> 
    </Child> 
    <Child> 
     <Purchase value ="110" id ="350" timestamp="2016-10-08T14:22:32.0000000"> 
    </Child> 
    <Child> 
     <Purchase value ="105" id ="350" timestamp="2016-10-09T14:22:32.0000000"> 
    </Child> 
    <Child> 
     <Purchase value ="75" id ="350" timestamp="2016-10-10T14:22:32.0000000"> 
    </Child> 
</Parent> 

Ниже запрос дает мне все 4 цены. Но я хочу только цену за самый последний TimeStamp? Как сделать в улье?

CREATE EXTERNAL TABLE Recommended_StagingTable (

ItemPrice INT 
) 
ROW FORMAT SERDE 
    'com.ibm.spss.hive.serde2.xml.XmlSerDe' 
WITH SERDEPROPERTIES ( 
    "column.xpath.id" ="/Parent/Child/Purchase[@id='350']/@value" 
) 

ответ

0

Добавить столбец purchase_timestamp в Recommended_StagingTable затем использовать SQL row_number аналитического Funtion найти позднюю временную метку:

select ItemPrice 
    from 
     (
     select 
      ItemPrice , 
      purchase_timestamp, 
      row_number() over(order by purchase_timestamp desc) rn 
           --add partition by if necessary 
     from Recommended_StagingTable 
    )s 
where rn = 1; --the latest by timestamp