通过变量计算Hive中的滞后

时间:2015-09-07 05:00:02

标签: hadoop hive

我的输入表如下:

guest_id    days
101          79
101          70
101          68
101          61
102          101
102          90
102          55
103          99
103          90

请注意,天数按降序排列,由guest_id

所需的输出表:

guest_id    days     days_diff
101          79      0
101          70      9
101          68      2
101          61      7
102          101     0
102          90      11
102          55      35
103          99      0
103          90      9

days_diff是guest_id的第一个订单差异(不是整天的列)

1 个答案:

答案 0 :(得分:1)

您还需要一个唯一的id列(否则Hive不知道您的行的顺序)。

然后你可以自{}加入id=id+1以获得分歧:

select a.guest_id, 
       a.days, 
       case when a.guest_id = b.guest_id then b.days-a.days else 0 end days_diff
from 
input a
join input b on a.id=b.id-1

编辑正如Kunal在评论中所指出的,Hive确实有一个Lag窗口函数,需要PARTITION BY ... ORDER BY子句;你仍然需要一些东西来订购你的桌子,例如,如果你有一个date列,你将使用它如下:

SELECT guest_id, 
       days, 
       LAG(days, 1, 0) OVER (PARTITION BY guest_id ORDER BY date)
FROM input;