Azure流分析 - 仅在与前一个事件不同时输出事件

问题描述 投票:1回答:2

我有一个特殊的情况,当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] ]]}]

我在azure流分析中使用此查询:

SELECT
    PE, UID, TIM,
    UDF.DI1(InputIoThub) As DI1
FROM
    [IoTHub]
WHERE
    LAG(DI1, 1) OVER (LIMIT DURATION(minute, 1)) <> DI1

根据这个指示:qazxsw poi

看起来LAG无法处理UDF。

我用以下内容替换了UDF:

https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-stream-analytics-query-patterns

但它也不起作用。

如果没有WHERE子句,流会生成正确的输出,因此我尝试使用HAVING而不成功。

非常感谢您的帮助!

azure azure-stream-analytics
2个回答
1
投票

我希望我的问题不会引起混淆,我正在寻找一种解决方案,只有在值发生变化时才从数据记录器发送数字输入(DI_1)。因此,原因是计算PowerBI的时差。

与此同时,我找到了一个解决方案:

LAG函数工作正常,也适用于WHERE

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

0
投票

请查看“确定值是否已更改”的查询模式

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)

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.