hadoop - 通过变量计算 Hive 中的滞后

标签 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 的第一个订单差异(不是天数列)

最佳答案

您还需要有一个唯一的 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/

相关文章:

sql - 选择 Hive 表中的第一个匹配项

Hadoop 集群和客户端连接

oracle11g - Hive 二进制和字符串数据类型

hadoop - 如何从映射器向驱动程序报告一个值?

hadoop - Apache PIG - 加入后跟 NULL 中的投影结果

hadoop - Sqoop增量作业导入的记录数比源中的记录数多

mysql - 如果列值不在一组不同列的值中,则 SQL 选择行

hadoop - 相当于 Apache Pig 中的 linux 'diff'

sql - 匹配Hive中STRUCT列中的字符串

hadoop - 找不到类 'org.apache.hadoop.hive.kafka.KafkaStorageHandler'