查找匹配的两列中的前3列



这是我的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

所以基本上,如果BIDPID相同,但timestamps不同,那么我需要按时间降序排列的前3个

为此,我在Hive中创建了rank UDF(用户定义函数)。我写了下面的查询,但对我不起作用。有人能帮我吗?

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

这是错误的,因为我遗漏了上面CCD_ 8的最后两行。有人能帮我吗?

select bid, pid, [time] from (
    select bid, pid, [time], rank() over (partition by bid, pid order by [time] desc) as k 
    from #temp ) as x 
where k  <=3
order by bid, pid, time desc 

哦,我在sql server。我不认为你是。。。。。。。。

无论如何。我的建议是,将您的排名函数移动到嵌套的select中。在外面选择你想要的地方,它小于三。。。我不知道你的语法。我不该回答这个问题。很抱歉lol

此处:http://ragrawal.wordpress.com/2011/11/18/extract-top-n-records-in-each-group-in-hadoophive/您的rank()位于外部select。。。它需要在内部。离开<4或<=3或外部where语句中的任何内容。您的查询几乎与该示例完全相同。。。只需要一些改变。

基于链接和我对蜂巢知识的绝对缺乏。。。我想你可能想要这个:

SELECT bid, pid, time
FROM (
    SELECT bid, pid, rank(time) as rank, time
    FROM $compTable 
    DISTRIBUTE BY bid, pid
    SORT BY bid, pid, time desc
) a
WHERE rank < 4
ORDER BY bid, pid, time desc

我不能测试或编译,因为老实说,在你发布问题之前,我根本不知道hive是什么。(小世界,我知道,很悲伤-很真实)

相关内容

  • 没有找到相关文章

最新更新