azure - Azure 流分析 - 仅当事件与前一个事件不同时才输出事件
问题描述
我有一种特殊情况,当将 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","记录":[[0, 0, 1, 0],[0, 1, 1, 0],[0, 2, 1, 0],[0, 3, 1, 0 ]]}]
我在天蓝色流分析中使用此查询:
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 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)
推荐阅读
- google-analytics - 分析中的跨域向属性添加命中?
- firebase-storage - 如何修复 React Native 中的“_filePath.includes 不是函数。(在 '_filePath.includes('&') 中,'_filePath.includes' 未定义)”?
- sql - 函数 - oracle(PLS-00103:遇到符号“”)
- c++ - QCombobox 自定义行为与模型
- php - SQL 学说查询,其结果与参数中传递的值一样多
- javascript - 如何在屏幕关闭或启动第二个时暂停音频标签
- c# - 如何将 _logger.LogInformation/error 与安全性(开发安全性)一起使用?
- python - Pandas 列展平为重复行
- database - 作业可执行 Oracle 8i
- forms - 按键按下时重置角度指令错误