我有一种特殊情况,即在将 LAG 与数组 (json) 中的输入数据结合使用时,流分析不会发送输出事件。
这是来自数据记录器的输入数据:
2019.04.2016:05:04> 设备:[WISE-4012_00D0C9E43D10],数据:[{"PE": 1,"UID":"WISE-4012_00D0C9E43D10","TIM":"2019-04-20T16 :04:55+01:00","记录":[[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 代替,但没有成功。
非常感谢您的帮助!
最佳答案
我希望我的问题不会令人困惑,我正在寻找一种解决方案,仅在值发生变化时从数据记录器发送数字输入(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)
关于Azure 流分析 - 仅当事件与前一个事件不同时才输出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53693174/