如何将 Hive 中与时间相关的事件组合在一起 SQL
How to group together time-related events in Hive SQL
我有一个看起来像这个代表性数据集的数据集(它是 的结果集):
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
我知道我可能需要某种 Row_Number 功能和分区,但我不能完全理解它。
您可以为此使用 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;
我有一个看起来像这个代表性数据集的数据集(它是
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
我知道我可能需要某种 Row_Number 功能和分区,但我不能完全理解它。
您可以为此使用 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;