【问题标题】:Combine individual messages to 1 output every 15 seconds每 15 秒将单个消息合并为 1 个输出
【发布时间】:2018-08-31 20:08:32
【问题描述】:

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

例如我想收集“Temperature”、“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 作业应该在看到 1 条消息时开始“收集”。 SA 工作是否适合此工作,还是我应该寻找其他解决方案?

【问题讨论】:

  • 嗨@Vort,欢迎来到 Stackoverflow。几个问题。 A)您是否关心这些值是否重复?例如"温度" : 15, 15, 1, 3. B) 你能在接收端/客户端做总结吗?
  • A) 我想避免重复 B) SA 作业应该触发 Azure 函数,因此理想情况下应该存在汇总值

标签: json azure azure-stream-analytics


【解决方案1】:

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

选择 设备 ID、[键]、[值] LAG(reading) OVER (PARTITION BY DeviceId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL) 从输入

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 2016-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多