0

想象一下,我有带有连续事件的 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))。

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

4

2 回答 2

1

在 0.11 之前,您可以使用 UDF(例如Nexr's
目前只有一个lag功能,但如果您要查询,应该在您的情况下这样做:
select n as "next" , lag(n) "previous" from t;

于 2013-08-27T16:17:16.017 回答
0

让我自己回答。

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

所以我正在寻找的查询是:

select n, lead(n) from t;
于 2013-08-27T08:27:08.080 回答