如何在hivesql中组合与时间相关的事件

yvfmudvl  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(331)

我有一个类似于此代表性数据集的数据集(它是此查询的结果集):

time                          
2012-02-01 23:43:16.9088243 <--
2012-02-01 23:43:16.9093561
2012-02-01 23:43:16.9098879

2012-02-01 23:43:17.1018243 <--
2012-02-01 23:43:17.1023561
2012-02-01 23:43:17.1028879

2012-02-01 23:43:17.2018243 <--
2012-02-01 23:43:17.2023561
2012-02-01 23:43:17.2028879

结果包含数百万行,所以现在我们需要一种方法来精简它,以便我们可以分析它。
如果您注意到,上面示例的前三行彼此之间的间隔在千分之一秒以内,但是后面三行之间的间隔为十分之一秒,下面三行之间的间隔也为十分之一秒。我添加了空行(不是在原始数据中)来说明这一点。
我需要一个查询,将识别那些时间戳是超过千分之一秒的距离上一个时间戳。由此产生的输出(假设第一组三个也与前一组相差十分之一秒)将是:

2012-02-01 23:43:16.9088243
2012-02-01 23:43:17.1018243
2012-02-01 23:43:17.2018243

我已经知道我可能需要一些行号功能和分区,但是我不能完全理解它。

q3qa4bjr

q3qa4bjr1#

你可以用 lag() 为此:

select t.*
from (select t.*,
             lag(time) over (order by time) as prev_time
      from t
     ) t
where prev_time is null or
      time > prev_time + interval '0.001' second;

相关问题