填补时间序列数据中的空白
在处理时间序列数据时,由于数据缺失或不活跃,可能会出现数据空白。
通常,我们不希望在查询数据时存在这些空白。在这种情况下,WITH FILL
子句会非常有用。
本指南讨论如何使用WITH FILL
填补时间序列数据中的空白。
设置
想象一下,我们有以下表格用于存储由GenAI图像服务生成的图像元数据:
让我们导入一些记录:
按区间查询
我们将探索2023年3月24日的00:24:03
到00:24:04
之间创建的图像,因此让我们为这些时间点创建一些参数:
接下来,我们将编写一个查询,将数据分组为100毫秒的区间,并返回在该区间内创建的图像数量:
结果集只包括创建图像的区间,但是对于时间序列分析,我们可能希望返回每个100毫秒的区间,即使它没有任何条目。
WITH FILL
我们可以使用WITH FILL
子句来填补这些空白。
我们还将指定STEP
,即要填补的间隔大小。
对于DateTime
类型,默认间隔为1秒,但我们想要填补100毫秒的间隔,因此让我们将步幅值设置为100毫秒:
我们可以看到间隔内的空白已用count
列中的0值填补。
WITH FILL...FROM
然而,在时间范围的开始处仍然存在空白,我们可以通过指定FROM
来解决这个问题:
我们可以从结果中看到,从00:24:03.000
到00:24:03.500
的所有区间现在都出现了。
WITH FILL...TO
然而,我们仍然错过了一些位于时间范围结束处的区间,我们可以通过提供一个TO
值来填补这些区间。
TO
是排除的,因此我们将在结束时间上加上一小段时间,以确保它被包含:
现在所有的空白都已填补,我们有从00:24:03.000
到00:24:05.000
每个100毫秒的条目。
累计计数
假设我们现在想要保持在各区间间创建图像数量的累计计数。
我们可以通过添加一个cumulative
列来实现,如下所示:
累计列中的值没有按我们想要的方式工作。
WITH FILL...INTERPOLATE
任何在count
列中为0
的行在累计列中也为0
,而我们更希望它使用累计列中的前一个值。
我们可以使用INTERPOLATE
子句来实现这一点,如下所示:
看起来好多了。
最后,让我们使用bar
函数添加一个柱状图,别忘了将我们的新列包含在INTERPOLATE
子句中。