两个日期之间的差异来自两个不同列中的两个连续行

时间:2016-11-30 03:17:36

标签: unix hive hiveql unix-timestamp hue

enter image description here我有一个包含超过数百万条记录的蜂巢表。 输入具有以下类型: 输入:

rowid     |starttime              |endtime                  |line   |status
--- 1     2007-07-19 00:05:00    2007-07-19 00:23:00        l1     s1 
--- 2     2007-07-20 00:00:10    2007-07-20 00:22:00        l1     s2
--- 3     2007-07-19 00:00:00    2007-07-19 00:11:00        l2     s2

我想要做的是当第一个按开始时间顺序排列表时。 然后找到两个连续行endtime和starttime之间的差异。如果差异超过5分钟,则在新表中添加一个新行,状态为misstime。

在输入行1& 2时间差为1小时10分钟所以第1天我将为第19个日期创建行并完成那些缺少时间的日期,然后再添加20行,如下所示。

输出:

rowid |starttime               |endtime              |line   |status
--- 1 |2007-07-19 00:05:00     |2007-07-19 00:23:00  |l1     |s1 
--- 2 |2007-07-19 00:23:01     |2007-07-19 00:00:00  |l1     |misstime
--- 3 |2007-07-20 00:00:01     |2007-07-20 00:00:09  |l1     |misstime
--- 4 |2007-07-20 00:00:10     |2007-07-20 00:22:00  |l1     |s2
--- 3 |2007-07-19 00:00:00     |2007-07-19 00:11:00  |l2     |s2 

任何人都可以帮助我直接在hue - hive中实现这一目标吗? Unix脚本也会这样做。

提前致谢。

1 个答案:

答案 0 :(得分:0)

解决方案模板是:

  1. 使用LAG()函数获取上一行开始时间或结束时间。
  2. 对于每一行计算当前时间和上一次之间的差异
  3. 过滤行差异超过5分钟。
  4. 将数据集转换为所需的输出。
  5. 示例:

        insert into yourtable
        select 
        s.rowid, 
        s.starttime ,
        s.endtime,
        --calculate your status here, etc, etc
    from    
        (
        select rowid starttime endtime, 
               lag(endtime) over(partition by rowid order by starttime) prev_endtime
        from yourtable ) s
        where (unix_timestamp(endtime) - unix_timestamp(prev_endtime))/60 > 5 --latency>5 min