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

Hive 如何在配置单元UDF中读取2条或更多记录?,hive,Hive,我有一张收费站日志表。我的任务(翻译成SQL)是: 第一步。使用“按站、车道分组”对这些记录进行排序 第二步。按检查时间顺序排列这些记录 步骤3.[这就是问题所在]连续判断每组中每两个连续记录的间隔是否小于5秒 如果我能用C、Java或其他语言,但不能用SQL,那就很容易了。 似乎HiveUdfuser定义的函数可以帮助我做到这一点。我已经阅读了官方文档中的演示UDF。但我仍然不知道如何将连续的2条记录传递到我的函数中。有什么建议吗?您可以使用SQL进行操作。 如果需要,可以使用LAG获取上一行

我有一张收费站日志表。我的任务(翻译成SQL)是:

第一步。使用“按站、车道分组”对这些记录进行排序

第二步。按检查时间顺序排列这些记录

步骤3.[这就是问题所在]连续判断每组中每两个连续记录的间隔是否小于5秒

如果我能用C、Java或其他语言,但不能用SQL,那就很容易了。 似乎HiveUdfuser定义的函数可以帮助我做到这一点。我已经阅读了官方文档中的演示UDF。但我仍然不知道如何将连续的2条记录传递到我的函数中。有什么建议吗?

您可以使用SQL进行操作。 如果需要,可以使用LAG获取上一行检查时间和其他列。然后用两个时间戳进行计算。使用unix_时间戳将时间戳转换为秒并减去:

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
Lead分析函数,用于获取下一行的检查时间或其他列(如果需要)