我有一种特殊情况,当将LAG与数组(json(中的输入数据结合使用时,流分析不会发送输出事件。
这是来自数据记录器的输入数据:
2019年4月20日16:05:04>设备:[WISE-4012_00D0C9E43D10],数据:[{"PE":1,"UID":"WISE-4012-00C9E43D10","TIM":"2019-04-20T16:04:55+01:00","记录":[[0,0,1,0],[0,1,0],[0
我在azure流分析中使用此查询:
SELECT
PE, UID, TIM,
UDF.DI1(InputIoThub) As DI1
FROM
[IoTHub]
WHERE
LAG(DI1, 1) OVER (LIMIT DURATION(minute, 1)) <> DI1
根据本说明:https://learn.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 clouse,流会生成正确的输出,所以我尝试使用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)
请查看"确定值是否已更改"的查询模式
https://learn.microsoft.com/en-us/azure/stream-analytics/stream-analytics-stream-analytics-query-patterns
感谢