Azure流分析-仅当事件与前一事件不同时才输出该事件



我有一种特殊情况,当将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

感谢

最新更新