如何在Hive中选择每对连续事件?

时间:2013-08-26 20:53:50

标签: hive

想象一下我有连续事件的Hive表T:

n
---
1
2
3
4
...

我需要编写一些代码来从这个表中选择每对连续事件。目前我有一个像

这样的解决方案
select t1.n, min(t2.n) from t t1 join t t2 where t1.n < t2.n group by t1.n;

即使对于相对较小的表(数千行),它也是非常无效的,因为它自身产生表的临时笛卡尔积(即复杂度为O(n ^ 2))。

我想找到针对同一问题的更便宜(希望是线性的)解决方案。

2 个答案:

答案 0 :(得分:1)

在0.11之前,您可以使用UDF(例如Nexr's
目前只有lag函数,但如果您要查询,则应该在您的情况下执行此操作:
select n as "next" , lag(n) "previous" from t;

答案 1 :(得分:0)

让我自己回答。

从Hive开始,引入了0.11窗口和分析功能:https://cwiki.apache.org/Hive/languagemanual-windowingandanalytics.html

所以我要查询的查询是:

select n, lead(n) from t;