これは私のTable1の下のデータです
BID PID TIME
---------+-------------------+----------------------
1345653 330760137950 2012-07-09 21:42:29
1345653 330760137950 2012-07-09 21:43:29
1345653 330760137950 2012-07-09 21:40:29
1345653 330760137950 2012-07-09 21:41:29
1345653 110909316904 2012-07-09 21:29:06
1345653 221065796761 2012-07-09 19:31:48
したがって、上記のシナリオを明確にする必要がある場合-上記の表に次のようなデータがあります-USERの場合1345653
、このPID330760137950
four times
がありますが、タイムスタンプが異なります。だから私はこのような出力が必要です-
私が必要とする出力:-
1345653 330760137950 2012-07-09 21:43:29
1345653 330760137950 2012-07-09 21:42:29
1345653 330760137950 2012-07-09 21:41:29
1345653 110909316904 2012-07-09 21:29:06
1345653 221065796761 2012-07-09 19:31:48
したがって、基本的BID
に とPID
が同じであるが異なる場合timestamps
、 TIME で降順でソートされた上位 3 つが必要です。
rank UDF
このために、Hive で (ユーザー定義関数)を作成しました。そして、私は以下のクエリを書きましたが、うまくいきません。誰でもこれについて私を助けることができますか?
SELECT bid, pid, rank(bid), time, UNIX_TIMESTAMP(time)
FROM (
SELECT bid, pid, time
FROM table1
where to_date(from_unixtime(cast(UNIX_TIMESTAMP(time) as int))) = '2012-07-09'
DISTRIBUTE BY bid,pid
SORT BY bid, time desc
) a
WHERE rank(bid) < 3;
したがって、上記のクエリでは、次のような出力が得られます
1345653 330760137950 2012-07-09 21:43:29
1345653 330760137950 2012-07-09 21:42:29
1345653 330760137950 2012-07-09 21:41:29
上記の最後の2行が欠落しているため、これは間違っていExpected Output
ます。誰でもこれで私を助けることができますか?