我有一个每小时传输数据的气象站。在那个小时内,它进行了四次录音(每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读数......
答案 0 :(得分:1)
建议的解决方案是使用MySQL的body {
font-family: 'Roboto',Arial,sans-serif;
color: #4B8A4B;
background-color: #001900;
}
[main] paper-toolbar {
background-color: #004C00;
color: #001900;
}
[drawer] a {
width: 100%;
}
[drawer] paper-toolbar {
height: 265px;
}
[drawer] paper-toolbar div {
overflow: hidden;
position: relative;
}
#content {
padding-left: 15px;
padding-right: 15px;
}
[drawer] {
border-right: thin #000 inset;
-moz-border-right-colors: #000;
background: #001900;
}
函数,以便将存储的基于字符串的“timeRecorded”属性转换为真正的MySQL时间戳类型。
然而,由于STR_TO_DATE
的“行”属性持久性模式,表中每4行会出现“timeRecorded”属性。在这种情况下,我认为您可以使用MySQL中的OrionMySQLSink
关键字,以便只获得每4行,例如(不是MySQL专家):
ROWNUM
另一种方法是转到“列”模式(在这种情况下,你必须自己配置de table)。通过使用此模式,您将拥有一个包含所有4个属性的行,其中一个属性是“timeRecorded”属性。在这种情况下,您可以通过直接将“timeRecorded”列的类型指定为Timestamp而不是Text来配置表。这样,您将避免使用SELECT STR_TO_DATE( attrValue, '%m/%d/%Y' ) FROM def_servpath_0004_weatherstation where (ROWNUM / 4 = 0);
部分。