假设传感器发送这样的数据:
{"timestamp": "2020-11-11 08:27:19", "temperature": 90, "device": "device1"}SELECT device, temperature, time_to_epoch(timestamp,'yyyy-MM-dd HH:mm:ss') as fn_ts FROM 'topic'device
价值:${device}${fn_ts}
单位:MILLISECONDS此数据未到达时间流db。但是,如果删除步骤4中设置的时间戳字段,则数据将到达时间流db。有什么问题吗?
令人惊讶的是,如果我将步骤2的输出重新发布到一个新的主题,并创建一个规则将msg从该主题发送到具有与上面步骤3和步骤4相同的配置的时间流db中,那么数据将进入时间流db。
另外,如果原始的msg是{"fn_ts": 1605083835000, "temperature": 90, "device": "device1"},而我有一条规则将数据发送到具有相同步骤3和步骤4的时间流db,那么数据将到达时间表表。
发布于 2021-01-22 14:08:43
我只是浪费了两天时间来玩IoT规则直接导入时间流。我只能确定它从一开始就像它看上去的那样多。使用自定义时间戳的唯一方法是执行建议的解决方法,例如在单独的规则中转换有效负载并重定向到另一个IoT主题。因为某些原因,导入操作没有看到来自SQL结果JSON的字段,而且我可以对其进行诊断,因为我附加了一个CloudWatch操作,以查看我试图使用SQL生成的每个有效负载。
但还有另一个大问题。当您最终设法将数据损坏到表中时,您将发现表中的每个有效载荷字段都是单独的度量字段,甚至是时间戳本身和您已经标记为维度的所有字段。这是完整的。在我浪费了那么多时间之后,我仍然需要继续使用定制的lambda来避免桌子上的那些杂乱无章的措施。
发布于 2021-05-27 23:48:45
使用AWS IoT规则时,当您使用替代模板引用您的SQL的AS子句中定义的别名时,它将无法正常工作。
来自文档
因为替换模板中的表达式与"SELECT .“是分开计算的语句,则不能引用使用AS子句创建的别名。只能引用原始有效载荷、函数和运算符中的信息。
所以你的有效载荷:
{"timestamp": "2020-11-11 08:27:19", "temperature": 90, "device": "device1"}如果将SQL更改为以下内容:
SELECT * FROM 'topic'您仍然可以像以前一样设置您的维度和设备,但是您可以像这样设置时间戳:
${time_to_epoch(时间戳,‘yyyy:mm:ss’)}
这将使用时间戳来调用time_to_epoch函数,并将得到的值用作时间流中的时间戳。
https://stackoverflow.com/questions/64782927
复制相似问题