每15秒将单个消息合并到1个输出中

时间:2018-08-31 20:08:32

标签: json azure azure-stream-analytics

是否可以将每15秒收到的单独设备消息合并为1个摘要设备消息?

例如,我要收集“温度”,“ RPM”和“仪表”消息:

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条消息(“温度”,“ RPM”和“仪表”)中有1条到达SA。在接下来的15秒内可能会收到另外2个。因此,当SA作业看到1条消息时,应开始“收集”。 SA工作适合于此吗?还是我应该寻找其他解决方案?

2 个答案:

答案 0 :(得分: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)。

答案 1 :(得分:0)

感谢您的答复。我已经使用SessionWindow解决了这个问题。