Hive 如何选择配置单元中的每对连续事件?

Hive 如何选择配置单元中的每对连续事件?,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; 从t1中选择t1.n,min(t2.n)加入t2,其中t1.n

假设我有一个包含连续事件的配置单元表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;
从t1中选择t1.n,min(t2.n)加入t2,其中t1.n
即使对于相对较小的表(数千行),这也是非常无效的,因为它本身会产生表的临时笛卡尔积(即复杂性为O(n^2))

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

让我自己回答

从Hive 0.11开始,引入了窗口和分析功能:

所以我要问的问题是:

select n, lead(n) from t;

在0.11之前,您可以使用自定义项(例如)
目前只有一个
lag
函数,但如果您要查询的话,它应该在您的情况下执行:

选择n作为“下一步”,从t中选择滞后(n)“上一步”

这听起来像是使用过程方法可以更容易地解决的问题,例如使用python,假设您可以导出表的有序视图。