我的输入表是这样的:
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 的第一个订单差异(不是天数列)
最佳答案
您还需要有一个唯一的 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 确实有一个滞后窗口函数,它需要一个 PARTITION BY ... ORDER BY
子句;你仍然需要一些东西来对你的表格进行排序,例如,如果你有一个 date
列,你可以像下面这样使用它:
SELECT guest_id,
days,
LAG(days, 1, 0) OVER (PARTITION BY guest_id ORDER BY date)
FROM input;
关于hadoop - 通过变量计算 Hive 中的滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32431363/