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脚本也会这样做。
提前致谢。
答案 0 :(得分:0)
解决方案模板是:
示例:
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