hive窗口函数lag与lead实际应用
简介 lag函数用于把指定列向后移动多少行之后和原表拼接。 lag(column,n,default) lead(column,n,default) 其中 column表示要移动的列,n表示要移动多少行,default表示默认值,不给就是null 示例: select gid, lag(time,1,'0') over (partition by gid order by time) as lag_time, lead(time,1,'0') over (partition by gid order by time) as lead_time from user_order; 实例 考虑这样一个问题,我们要找出连续2个月都购买了某个指定商品的人,怎么处理? 很多同学可能首先考虑的是把时间处理成月份,然后根据用户id分组,统计月份大于2的就可以了。 如果问题变一点点,要找出在60天内至少购买过2次某个指定商品的人,怎么处理? 咋一看,一样的,实际上没有给出是哪60天,所以要计算所有订单时间的差值,然后找出时间差在60天范围之内的订单用户。 逻辑比较简单,但是处理起来不太还处理,不过如果知道lag或者lead函数,就变得非常简单了。 只需要把使用head函数,把后一次订单时间拼接上来,然后通过过滤器过滤一下就好了。 下面看一个代码示例,应该就清楚了。 代码实例 import org