【发布时间】:2021-11-01 16:27:55
【问题描述】:
我的流分析正在摄取不同类型的消息流。有些是type: telemetry,有些是type: flags。我需要计算一些遥测值的移动窗口的平均值,但只考虑那些前面带有值为 true 的标志消息的值。
换句话说:无论是否考虑遥测来计算平均值,标志消息都会打开/关闭。
我尝试了以下查询:
SELECT
devId,
type,
AVG ("myValue") OVER ( LIMIT DURATION (second, 30) WHEN
LAG (value) OVER (LIMIT DURATION(minute, 5) WHEN type='flag' and text='myValueFlag') = 1
) as 'myValueAvg'
MAX("ts") as 'ts'
INTO "eventhub-output"
FROM "iothub-input" TIMESTAMP BY "ts"
WHERE type = 'telemetry'
GROUP BY devId, type, SlidingWindow(second, 30)
但我收到此错误消息:
在使用 GROUP BY 的查询中,分析函数既不能用于 GROUP BY 也不能用于 SELECT,除非它们是聚合函数的参数,例如 SUM(LAG(x) OVER(LIMIT DURATION(ss, 5 ))。
我不知道如何从这里开始。 documentation 说
LAG 不受 WHERE 子句中的谓词、JOIN 子句中的连接条件或当前查询的 GROUP BY 子句中的分组表达式的影响,因为它在这些子句之前进行评估。
所以我假设上面的查询应该可以工作。
【问题讨论】:
-
您是否尝试过使用 WITH 分两步编写查询?它应该工作。我需要仔细检查文档 sn-p。
-
我不知道该怎么做。我究竟会提取什么到 WITH 子句?
标签: azure azure-stream-analytics