【问题标题】:Stream Analytics, grabbing value if happened once over time流分析,如果随着时间的推移发生一次,就会抓住价值
【发布时间】:2020-09-25 06:54:08
【问题描述】:

以下是我想要完成的查询示例:

WITH IoTData AS
( SELECT *,
    CAST(iothub.time AS datetime) AS time,
    TRY_CAST(iothub.value AS float) AS value,
    ref.AssetSignalTag AS assetsignaltag

    FROM iothub TIMESTAMP BY iothub.time

    JOIN masterdatasql ref 
    ON ref.[ConnectionString] = iothub.id
    WHERE iothub.value IS NOT NULL
),

HISTORY AS ( 
SELECT assetsignaltag,
value,
COUNT(*) AS Count
CASE
 WHEN value = 1 THEN 1
 ELSE 0
END AS ConditionResult

FROM IoTData
   
GROUP BY assetsignaltag, SlidingWindow(minute, 30), value
)


SELECT
    time,
    value,
    assetsignaltag,
    HISTORY.ConditionResult,
    HISTORY.Count 

INTO eventhub
FROM IoTData 
JOIN HISTORY
ON HISTORY.assetsignaltag = IoTData.assetsignaltag
AND DATEDIFF(minute, IoTData, HISTORY) = 10
WHERE HISTORY.ConditionResult = 1
AND MAX(HISTORY.Count) OVER (PARTITION BY IoTData.assetsignaltag LIMIT DURATION (minute, 10)) = 1

/* Here is where I run into issues, because I'm not sure how to grab the value of 'over last 10 minutes if there was only 1 value'.

Also tried AND HISTORY.Count = 1 which makes more sense to me since I'm already defining the time of 10 minutes in the DATEDIFF above, but I'm not sure that the datetime function does what I think it does.

 */

问题是这将在流分析语法中被接受,但不会起作用。我试图从本质上使“嘈杂”的数据点变得不那么嘈杂。我们并不关心它是否会在 2 分钟内翻转到 1 到 0 到 1 到 0 到 1,但是如果它翻转到 1 并保持 10 分钟,我们希望它进入 eventthub,这会触发警报.

让我知道我是否可以对此进行澄清,或者我是否应该特别尝试任何事情。

【问题讨论】:

  • @silent 不会只是从 10 分钟窗口中获取第一个值而忽略后面是否有值吗?仅在 10 分钟内有 1 个条目进入数据点时才抓取
  • hm 可能更多的是 LAG docs.microsoft.com/en-us/stream-analytics-query/… 这允许您比较一个值与上次发送时相比是否发生了变化。这更适合你的情况吗?
  • @silent 这似乎更接近答案,但我有点困惑如何使语法对我有利。 LAG(IoTData.value,1,'ALERT') OVER (PARTITION BY IoTData.AssetSignalTag LIMIT DURATION(minute,10)) AS AlertResult 我不确定这是否像我认为的那样工作。似乎 LAG 正在寻找以前的值。只要该窗口中有值,它就会返回吗?如果没有,我可以发送一个触发值吗?我的目标是如果在同一个 10 分钟的滑动窗口中发生两个使用相同 assetssignaltag 的事件,则删除所有内容
  • LAG 查看您的 LIMIT 时间范围内的所有事件。 LAST 只看上一个事件docs.microsoft.com/en-us/stream-analytics-query/…

标签: azure azure-eventhub azure-stream-analytics


【解决方案1】:

我可能不完全理解您想要执行的计算,但似乎您可以跳过连接并使用 LAG。

HISTORY 步骤创建一个“对于 IoTData 中的每个事件,回顾 30 分钟并计算每个资产信号标签的事件数和 1 或 0 值”的流。

如果您只想在过去 10 分钟内事件数正好为 1 时获得这样的结果,您可以:

SELECT *
FROM HISTORY
WHERE Count() OVER (LIMIT DURATION(minute, 10)) = 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 2022-01-20
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    相关资源
    最近更新 更多