Fiware 如何平衡天鹅座中的行模式和列模式?

Fiware 如何平衡天鹅座中的行模式和列模式?,fiware,fiware-orion,fiware-cygnus,Fiware,Fiware Orion,Fiware Cygnus,我有一个每小时传送数据的气象站。在这一小时内,它录制了四次录音(每15分钟一次)。在我目前的情况下,我使用attr_persistence=row在MySql数据库中存储数据 使用行模式,我将获得默认生成的列: recvTimeTs | recvTime | entityId | entityType | attrName | attrType | attrValue | attrMd 但我的气象站向我发送了以下数据: | attrName | attrValue time

我有一个每小时传送数据的气象站。在这一小时内,它录制了四次录音(每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
这些属性值在数据库中表示为字符串

是否有办法将三个测量值保持在行模式,并将记录的时间切换到列模式?如果没有,我还有什么选择

所有这一切的目的是查询时间记录值,但我不能查询日期,只要它是字符串

作为旁注:让气象站在记录数据后(每15分钟)立即发送数据是不可能的,首先是因为我需要节省电池电量,更重要的是,如果post出现问题,它将立即发送所有记录


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

建议的解决方案是使用MySQL的
STR_to_DATE
函数,以便将存储的基于字符串的“timeRecorded”属性转换为真正的MySQL时间戳类型

然而,由于
OrionMySQLSink
的“row”属性持久化模式,表中每隔4行显示一次“timeRecorded”属性。在这种情况下,我认为您可以使用MySQL中的
ROWNUM
关键字,以便每4行只获取一次,比如(不是MySQL专家):


另一种方法是移动到“列”模式(在这种情况下,您必须自己设置de表)。通过使用此模式,您将有一个包含所有4个属性的单行,其中一个属性是“timeRecorded”。在这种情况下,您可以通过直接将“timeRecorded”列的类型指定为Timestamp而不是文本来设置表。这样,您将避免使用最新的
STR\u部分。

我需要您对您的问题进行详细说明。如何在一次Orion通知中发送4个测量值?您是否使用了4种不同的属性?还是单个多值属性?顺便说一句,正如您在示例中所描述的,它们是4个度量值还是3个度量值?关于时间记录值,您可以使用MySQL函数将其转换为MySQL时间戳,例如
STR_to_DATE
:@frb我使用4个不同的属性:三个度量值和记录的时间。
选择STR_to_DATE(attrValue,%m/%d/%Y'))从“def_servpath_0004_weatherstation”
@frb我刚刚尝试了这个脚本,它总是产生一个空值,可能是因为它实际上是每四个位置的一个日期。好的,3个度量值。。。我只是想提醒你:3个测量值只能覆盖45分钟整小时:)我的意思是,你将有16:15、16:30和16:45的测量值,从16:45到17:15,你有30分钟的间隔。无论如何,从问题的角度来看,这并不重要。你的回答有道理,但出于某种原因,它在我的例子中不起作用。我尝试将以下格式从字符串转换为日期,但它们都产生空值:
2015-04-30T16:50:42.87
15:15:0,30.4.2015
SELECT STR_TO_DATE( attrValue, '%m/%d/%Y' ) FROM def_servpath_0004_weatherstation where (ROWNUM / 4 = 0);