计算分区 HIVE 中行的时间戳差异
Posted
技术标签:
【中文标题】计算分区 HIVE 中行的时间戳差异【英文标题】:Calculate difference in timestamps for rows in a partition HIVE 【发布时间】:2020-09-09 21:23:53 【问题描述】:我需要计算 hive 中序列号的各种交互之间的差异。 我的桌子有多个序列号,有多个交互。我已经根据时间戳对序列号的交互进行了排序。我现在也有兴趣为连续行添加一个时间戳不同的列。
例如,图像中的最后一列显示了预期的输出。
感谢您的帮助。
【问题讨论】:
【参考方案1】:您可以使用lag()
访问给定分区中的“上一个”行:
select
t.*,
lag(timestamp) over(partition by sr_no order by timestamp) as lag_timestamp
from mytable t
假设你想要两个时间戳之间的秒差,那么:
select
t.*,
unix_timestamp(timestamp)
- unix_timestamp(lag(timestamp) over(partition by sr_no order by timestamp))
as diff_seconds
from mytable t
【讨论】:
我认为 Hive 允许您直接减去两个时间戳并生成具有适当文本格式的区间数据类型? @MatBailie:这将使查询更整洁。您是否有引用此行为的文档?我找不到,-而且野外没有 Hive fiddle 可用于测试。 不,“the”手册似乎对可以应用的操作非常有限。我只有遥远的记忆,还有这个:sqlandhadoop.com/how-to-subtract-timestamp-date-time-in-hive以上是关于计算分区 HIVE 中行的时间戳差异的主要内容,如果未能解决你的问题,请参考以下文章
Oracle - 计算时间戳之间的差异大于 1 小时的时间戳