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

Posted

技术标签:

【中文标题】每 15 秒将单个消息合并为 1 个输出【英文标题】:Combine individual messages to 1 output every 15 seconds 【发布时间】: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,欢迎来到 ***。几个问题。 A)您是否关心这些值是否重复?例如"温度" : 15, 15, 1, 3. B) 你能在接收端/客户端做总结吗? A) 我想避免重复 B) SA 作业应该触发 Azure 函数,因此理想情况下应该存在汇总值 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于每 15 秒将单个消息合并为 1 个输出的主要内容,如果未能解决你的问题,请参考以下文章

将多字节数组图像数据合并为一个字节数组数据,并将WriteAllBytes合并为单个图像输出

56. 合并区间

20210422-合并区间

56. 合并区间

56. 合并区间

力扣56. 合并区间