每 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 个输出的主要内容,如果未能解决你的问题,请参考以下文章