2016-11-07 6 views
0

xmlからハイブ外部表を作成しています。タイムスタンプが最大の要素の値を取得したい。これをテーブル作成ステートメントにどのように書き込むのですか?複数の一致がある場合にXpathをプルする最大値

マイ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の価格を提供します。しかし、私は最も最近のタイムスタンプの価格だけが欲しいですか?ハイブでのやり方は?

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

タイムスタンプで最新のを見つけるために、分析目的球ROW_NUMBER SQLを使用し、その後Recommended_StagingTableにpurchase_timestamp列を追加します。

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 
関連する問題