每15秒将单个消息组合为1个输出

问题描述 投票:1回答:2

是否有可能将每15秒收到的单独设备消息合并为1个汇总设备消息?

例如,我想收集“温度”,“RPM”和“Gauge”消息:

Message 1

{
   DeviceId: 1
   Key: "Temperature" 
   Value: 15
}


Message 2   
{
    DeviceId: 1,
    Key: "RPM"
    Value: 2000
}

成:

{
  DeviceId: 1,
  Readings:
  {
     "Temperature": 15,
     "RPM": 2000 
     "Gauge": "Unknown" (no value in the 15 seconds window, so unknown)
  }
}

编辑:忘记添加,预计如果设备的3条消息中的1条(“温度”,“RPM”和“仪表”)到达SA。其他2人很可能会在接下来的15秒内收到。因此SA工作应该在看到其中一条消息时开始“收集”。 SA工作是否适合这个或者我应该寻找其他解决方案吗?

json azure azure-stream-analytics
2个回答
0
投票

您可以使用LAG函数执行此操作。看起来像这样:

SELECT 
     DeviceId, [Key], [Value] 
     LAG(reading) OVER (PARTITION BY DeviceId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
     FROM input

LAG允许您查看指定数量的事件,然后查看给定的分区键(在本例中,我使用了DeviceId)。


0
投票

谢谢你的回复。我用SessionWindow解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.