在使用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
专家
已提问 8 个月前20 查看次数
1 回答
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
专家
已回答 8 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则