2

我有一个每小时传输数据的气象站。在那一小时内,它会进行四次录音(每 15 分钟一次)。在我目前的情况下,我正在使用attr_persistence=row将数据存储在 MySql 数据库中。

使用行模式,我得到默认生成的列:

recvTimeTs | recvTime | entityId | entityType | attrName | attrType | attrValue | attrMd

但是我的气象站向我发送了以下数据:

 |   attrName    | attrValue

   timeRecorded   14:30:0,22.5.2015
   measurement1   18.799
   measurement2   94.0
   measurement3   1.19

这些 attrValue 在数据库中表示为字符串。

有没有办法让三个测量值保持在行模式并将 timeRecorded 切换到列模式?如果没有,那么我的选择是什么?

这一切的重点是查询时间记录值,但只要它是字符串,我就无法查询日期。

附带说明:让气象站在记录后立即发送数据(每 15 分钟)是不可能的,首先是因为我需要节省电池电量,更重要的是因为在帖子出现问题的情况下,它将一次发送所有录音。

因此,如果一整天没有发送任何数据,气象站将一次发送所有 24*4 读数......

4

1 回答 1

1

建议的解决方案是使用STR_TO_DATEMySQL 的功能,以便将存储的基于字符串的“timeRecorded”属性转换为真正的 MySQL Timestamp 类型。

然而,由于OrionMySQLSink. 在这种情况下,我认为您可以使用ROWNUMMySQL 中的关键字来获取每 4 行,例如(不是 MySQL 专家):

SELECT STR_TO_DATE( attrValue, '%m/%d/%Y' ) FROM def_servpath_0004_weatherstation where (ROWNUM / 4 = 0);

另一种方法是移动到“列”模式(在这种情况下,您必须自己提供表格)。通过使用此模式,您将拥有一个包含所有 4 个属性的单行,作为“timeRecorded”属性之一。在这种情况下,您可以通过直接将“timeRecorded”列的类型指定为 Timestamp 而不是 Text 来配置表。这样,您将避免该STR_TO-DATE部分。

于 2015-05-27T14:32:27.770 回答