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

标签 azure azure-stream-analytics

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

根据此说明: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 语句,流会生成正确的输出,因此我尝试使用 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/

相关文章:

.net - 修改流单元 dotnet SDK - Azure 流分析

azure - DocumentDb "where"带有数学表达式的子句

c# - 在异步 Azure 函数中捕获异常的位置

azure - 为 IoT Edge 部署 Azure 流分析作业

azure - 具有动态持续时间的翻滚窗口

c# - 如何通过 C# 中的 Azure 函数在设备中执行方法?

azure - 如何使用 Bicep 激活 Azure Front Door 路线的压缩?

api - 尝试通过 REST API 获取 Azure 管理事件时出现 "The request is badly formed"

visual-studio-2010 - 使用 Azure 计算模拟器调试角色实例的问题, '/' 应用程序中的服务器错误

azure - 如何使用 StreamAnalitics 每 5 分钟统计当天的所有 azure EventHub 事件?