2016-08-25 9 views
0

豚では、次のレコードのavail_sinceに特定のIDが与えられ、指定されたidの最後のレコードについてはデフォルトで9999-12-31 。私はIDでデータを注文してからAvail_Sinceから始めていますが、それ以降は固執しています。私は、オーバー/ステッチ/リード/ラグ機能が必要かもしれないとは思いますが、わかりません。どんな助けでも大歓迎です!Apache PIG - 現在の行の日付を次のレコードの日付に設定します

入力データ:

ID  AVAIL_SINCE AVAIL_UNTIL 
1  19-Jan-00  31-Dec-99 
1  11-Jun-00  31-Dec-99 
1  4-Aug-00  31-Dec-99 
1  19-May-01  31-Dec-99 
2  5-May-02  31-Dec-99 
2  8-Apr-03  31-Dec-99 
3  10-Jun-00  31-Dec-99 
3  31-Oct-00  31-Dec-99 
3  29-Dec-00  31-Dec-99 

必要な結果:

ID  AVAIL_SINCE AVAIL_UNTIL 
1  19-Jan-00  11-Jun-00 
1  11-Jun-00  4-Aug-00 
1  4-Aug-00  19-May-01 
1  19-May-01  31-Dec-99 
2  5-May-02  8-Apr-03 
2  8-Apr-03  31-Dec-99 
3  10-Jun-00  31-Oct-00 
3  31-Oct-00  29-Dec-00 
3  29-Dec-00  31-Dec-99 

答えて

0
--load file  
    A = load 'pdemo/sample1' 
    using PigStorage(',') 
    as(id:int,date1:chararray,date2:chararray); 

    --Generate alternate record except last row. 
    B = RANK A; 
    C = foreach B generate rank_A-1,date1,date2; 
    J = join B by rank_A,C by $0; 
    result = foreach J generate B::id as ID,B::date1 as AVAIL_SINCE,C::date1 as AVAIL_UNTIL; 


    --Extract the last row 
    grp = group B all; 
    maxr = foreach grp generate MAX(B.rank_A); 
    ij1 = join B by rank_A,maxr by $0; 
    last_row = foreach ij1 generate B::id as ID,B::date1 as AVAIL_SINCE,B::date2 as AVAIL_UNTIL; 

    Final_result = union result,last_row; 

これが役立つことを願っています!

+0

こんにちはアンクール、ありがとうございました!私は間違いなくこれを私の問題に取り入れるつもりです。しかし、私は申し訳ありませんが、私は複数のIDを持っていることを含めることを忘れてしまったので、私は何とかこのIDにグループを含める必要があります。 IDでグループ化された同じ機能を実行できるように、少しだけ回答を編集できますか? – hm25252

関連する問題