如何在Hive UDF中读取2条或更多记录?

时间:2019-04-19 01:08:06

标签: hive

我有一些收费站日志的表。我的任务“翻译成” SQL是:

步骤1.使用GROUP BY站点,车道对这些记录进行排序。

步骤2。使用ORDER BY check_time排列这些记录。

第3步。 [是问题] 连续判断每组中的每两个连续记录,无论间隔是否小于5秒。

如果我可以用C,Java或其他语言实现但不使用SQL则很容易。 似乎Hive UDF(用户定义函数)可以帮助我做到这一点。我已经阅读了官方文档中的Demo UDF。但是我仍然不知道如何将连续的2条记录传递到我的函数中。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您可以使用SQL来完成。 使用#deleted-channel analytic function,可以获取上一行LAG()和其他必要的列。然后使用两个时间戳进行计算。使用unix_timestamp()将时间戳转换为秒,然后减去:

check_time

select t.*, case when time_diff < 5 then ... else ... end --do some logic from ( select t.*, --current time minus previous time unix_timestamp(check_time) - unix_timestamp(lag(check_time) over (partition by station, lane order by check_time)) as time_diff from table t ) t 分析函数可在必要时获取下一行的check_time或其他列。