Azure Stream Analytics - 仅当事件与前一个事件不同时才输出事件

Azure Stream Analytics - output an event only when it is different to the previous one

我遇到一种特殊情况,即在将 LAG 与数组中的输入数据结合使用时,流分析不会发送输出事件 (json)。

这是来自数据记录器的输入数据:

20.04.2019 16:05:04> 设备:[WISE-4012_00D0C9E43D10],数据:[{"PE": 1,"UID":"WISE-4012_00D0C9E43D10","TIM":"2019-04-20T16:04:55+01:00","Record":[[0, 0, 1, 0],[0, 1, 1, 0],[0, 2, 1, 0],[0, 3, 1, 0]]}]

我在 Azure 流分析中使用此查询:

SELECT
    PE, UID, TIM,
    UDF.DI1(InputIoThub) As DI1
FROM
    [IoTHub]
WHERE
    LAG(DI1, 1) OVER (LIMIT DURATION(minute, 1)) <> DI1

根据此说明:https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-stream-analytics-query-patterns

看起来LAG无法处理UDF。

我用以下内容替换了 UDF:

SELECT
   PE, UID, TIM,
   GetArrayElement(GetArrayElement(Record,0), 3) AS DI_1
INTO
   [toPowerBI]
FROM
   [IoTHub]
WHERE
   LAG(DI_1, 1) OVER (LIMIT DURATION(minute, 1)) <> DI_1

但它也不起作用。

没有 WHERE 子句,流会生成正确的输出,所以我尝试使用 HAVING 代替,但没有成功。

非常感谢您的帮助!

请查看 'Determine if a value has changed'

的查询模式

https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-stream-analytics-query-patterns

谢谢

我希望我的问题没有混淆,我正在寻找一种解决方案,以便仅在值发生变化时从数据记录器发送数字输入 (DI_1)。因此,原因是在 PowerBI 中计算时间差。

同时我找到了解决办法:

LAG 函数工作正常,也适用于 WHERE

SELECT
   PE, UID, TIM,
   GetArrayElement(GetArrayElement(Record,0), 3) AS DI_1
INTO
   [toPowerBI]
FROM
   [IoTHub]
WHERE
   LAG(GetArrayElement(GetArrayElement(Record,0), 3), 1) 
   OVER (LIMIT DURATION(minute, 10)) <>    
   GetArrayElement(GetArrayElement(Record,0), 3)