想象一下我有连续事件的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))。
我想找到针对同一问题的更便宜(希望是线性的)解决方案。
答案 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;