我正在将流分析作业从Databricks / Spark迁移到Azure流分析。输入来自IoTHub,并且每次传感器值在阈值范围(例如,从“警告”到“警报”范围)之间变化时,查询都必须发出事件。
现有解决方案利用“状态流式传输”,即它在内存中保存每个设备的最新状态,并比较每条新消息。在作业启动时(或在某些其他情况下),没有“最后状态”;在这种情况下,将创建一个附加事件-并由下游组件正常处理。
我正在尝试在ASA中实现此功能:
lag(value, 1, null) over (partition by(serialMachine) limit duration(minute, 60))
我尝试使用ISFIRST和LAST函数,但所有这些都指向一个时间窗口,即,导出条件将定期得到满足。但是我只需要一次。
有任何解决方法的想法吗?
答案 0 :(得分:1)
作业的开始时间实际上是定义第一个输出的时间。但是,Azure Stream Analytics将回顾事件流,在您的情况下为60分钟,因为您有60分钟的LAG。 我们最近在the start job doc上添加了有关此行为的更多信息。 对于您的情况,您可以在60分钟后开始工作,而不阅读任何过去的信息。
如果您有任何其他疑问,请随时与我们联系。
谢谢
JS
答案 1 :(得分:0)
如果我理解得很好,则似乎源记录已被调整。这意味着System.Timestamp
(即实际考虑的时间戳)已在开始时间之后的将来“移动”。您是否尝试过删除迟到的事件?您可以在Configure -> Event Ordering
菜单中调整策略。
参考:Configuring event ordering policies for Azure Stream Analytics