这是我的 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
因此,如果我需要澄清上述情况——我在上表中有这样的数据——对于用户1345653
,我有这个 PID 330760137950
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
,那么我需要按时间降序排序的前 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
这是错误的,因为我缺少Expected Output
上面的最后两行。谁能帮我这个?