我的数据以5分钟的包发送给我。我正在逐秒读取设备的状态,并且已经构建了一个脚本来使用熊猫聚合具有相同状态的连续行。我的数据看起来像这样。
timestamp status length
00:00:00 1 38
00:00:38 0 72
00:01:50 1 27
...
我希望查询一整天价值5分钟的包裹,而不会发现5分钟包装的边缘。当前,当我在AWS Athena中跨多个数据包查询时,我发现相同状态的连续行未聚合。
例如
timestamp status length
00:04:02 1 24
00:04:26 0 15
00:04:41 1 19
00:05:00 1 11
00:05:11 0 8
00:05:19 1 22
...
我想聚合两行,以便使用标准SQL将5分钟软件包边缘的状态聚合在一起,以使上面的示例如下所示。状态位相等的连续行将合计为一,并累加这些连续条目的长度。
timestamp status length
00:04:02 1 24
00:04:26 0 15
00:04:41 1 30
00:05:11 0 8
00:05:19 1 22
...
SQL内是否具有按照上述结构返回此查询的功能?
答案 0 :(得分:0)
这是一个“空白和孤岛”的问题。 Amazon Athena支持row_number()
,因此您可以使用行号差法解决它:
select status, min(timestamp) as timestamp, sum(length) as length
from (select t.*,
row_number() over (order by timestamp) as seqnum,
row_number() over (partition by status order by timestamp) as seqnum_s
from t
) t
group by status, (seqnum - seqnum_s);