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
看起来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'
的查询模式
谢谢
我希望我的问题没有混淆,我正在寻找一种解决方案,以便仅在值发生变化时从数据记录器发送数字输入 (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)
我遇到一种特殊情况,即在将 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
看起来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'
的查询模式谢谢
我希望我的问题没有混淆,我正在寻找一种解决方案,以便仅在值发生变化时从数据记录器发送数字输入 (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)