有没有办法确定作业运行的“起点”?

时间:2019-04-17 10:40:26

标签: azure-stream-analytics

我正在将流分析作业从Databricks / Spark迁移到Azure流分析。输入来自IoTHub,并且每次传感器值在阈值范围(例如,从“警告”到“警报”范围)之间变化时,查询都必须发出事件。

现有解决方案利用“状态流式传输”,即它在内存中保存每个设备的最新状态,并比较每条新消息。在作业启动时(或在某些其他情况下),没有“最后状态”;在这种情况下,将创建一个附加事件-并由下游组件正常处理。

我正在尝试在ASA中实现此功能:

  1. 使用
  2. 可以轻松完成与最后一条记录的比较
lag(value, 1, null) over (partition by(serialMachine) limit duration(minute, 60))
  1. 在使用本地输入数据进行测试时,上述结果对于第一条记录为空,可用于创建消息。
  2. 但是在Azure上运行时,“滞后”会返回一个值,,即使其源记录的时间戳早于配置的作业开始时间。我认为这被视为“输出开始时间”,并且无论此时间戳如何,所有可用的消息或至少一些其他消息都将从IoTHub加载。

我尝试使用ISFIRST和LAST函数,但所有这些都指向一个时间窗口,即,导出条件将定期得到满足。但是我只需要一次。

有任何解决方法的想法吗?

2 个答案:

答案 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