计算分区 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 小时的时间戳

计算多个时间戳之间的差异

带有 UNIX 时间戳的 MySQL 表 - 按时间戳排序并计算一行与前一行之间的差异

计算两个时间戳列的差异[重复]

分组并计算时间戳的差异

DB2,在尝试计算提供的时间戳和存储的时间戳之间的差异时,出现错误“函数的调用不明确”