在使用Timestream INTERPOLATE_LOCF函数时,不允许有重复的时间戳序列错误。

0

【以下的问题经过翻译处理】 团队您好,

我们一直在使用INTERPOLATE_LOCF来采样时间范围内的数据,以便不拉太多数据点。它根据时间范围自动选择N条记录。对于我们的情况,我们获取两个选定日期之间的差异,并将其除以30。因此,当我们运行查询时,无论日期范围如何,我们始终返回最多30个数据点。我们一段时间以来没有遇到任何问题。然而,最近我们添加了一些新的IoT传感器,有时会短暂失去连接,导致它实际上会在确切的时间戳上发送两个数据点到timestream。因此,当我尝试运行INTERPOLATE_LOCF时,它会返回错误“不允许在时间序列中重复时间戳。”。我已经查看了timestream中的记录,有时两个记录具有完全相同的时间戳,例如“2023-01-10 19:34:41.668000000”和“2023-01-10 19:34: 41.668000000”。是否有任何方式可以在timestream表中有重复的时间戳的情况下使用INTERPOLATE_LOCF函数?

以下是一个将日期范围拆分为间隔1.7秒的30个数据点的示例查询:

SELECT INTERPOLATE_LOCF(CREATE_TIME_SERIES(time, measure_value::varchar),SEQUENCE(min(time), max(time), 1.7s)) AS interpolated_temp FROM TimeStreamTable

谢谢您的时间。

profile picture
EXPERTE
gefragt vor 9 Monaten26 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 对于有相似问题的人,经过一些调查后,我发现 CREATE_TIME_SERIES 函数引发了该错误。它不允许有重复的时间戳。因此,我通过编写嵌套查询来过滤掉重复的时间戳,首先使用 group by,distinct on 时间,并仅选择指定度量值的值来解决此问题。您可以使用 MAX、AVG 或 MIN 函数来实现这一点。以下是我的最终查询:

WITH DistinctTimeDatePoints AS ( SELECT distinct time, max(measure_value::varchar) as measure_value FROM MITimeStreamDB.Table1 WHERE time BETWEEN '2022-12-1 19:31:20.000000000' AND '2023-01-10 19:31:50.000000000' GROUP BY time ) SELECT INTERPOLATE_LOCF(CREATE_TIME_SERIES(DISTINCT time, measure_value),SEQUENCE(min(time), max(time), 115201s)) AS InterpolatedSeries FROM DistinctTimeDatePoints

profile picture
EXPERTE
beantwortet vor 9 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen