如何使用流分析检测任何 IoTHub 设备中是不是未摄取数据?
Posted
技术标签:
【中文标题】如何使用流分析检测任何 IoTHub 设备中是不是未摄取数据?【英文标题】:How to detect if no data ingested in any IoTHub Device using Stream analytics?如何使用流分析检测任何 IoTHub 设备中是否未摄取数据? 【发布时间】:2021-06-10 12:03:38 【问题描述】:基本上我在 IoTHub 中有多个设备,有 30 个分区。现在,我想使用流分析检测 10 分钟后是否没有数据被摄取到任何设备。一旦检测到,我想选择它是什么设备并将该信息发送到 Azure 功能以进行警报。
鉴于我是流分析新手,因此查询有点棘手。到目前为止,这是我想出的,但结果似乎不是我所期望的。
SELECT
t1.[IoTHub].[ConnectionDeviceId] as DeviceId
INTO
[NoDataAlertFunctionOutput]
FROM
[iot-hub-data-flow] t1 TIMESTAMP BY Timestamp
LEFT OUTER JOIN [iot-hub-data-flow] t2 TIMESTAMP BY Timestamp
ON
t1.[IoTHub].[ConnectionDeviceId]=t2.[IoTHub].[ConnectionDeviceId]
AND
DATEDIFF(minute,t1,t2) BETWEEN 1 and 10
WHERE t2.[IoTHub].[ConnectionDeviceId] IS NULL
我将非常感谢任何建议或评论。
以下是我试图遵循的参考:
Stream Analytics Common Query Process real-time IoT Data另一方面,IoTHub 中是否有内置功能可以检测在特定时间段内是否没有摄取数据?
【问题讨论】:
【参考方案1】:从 ASA 的角度来看,我会改用 this pattern。我不能 100% 确定它会检查您的所有要求,但我认为这是一个有趣的探索方向。
使用hopping window,我们每分钟扫描最后 20 个 首先我们在那个窗口中找到最后一个事件 然后我们检查是否发送超过10分钟WITH CTE AS (
SELECT
System.Timestamp() AS Window_end,
DATEADD(minute,-10,System.Timestamp()) AS Window_10,
TopOne() OVER (ORDER BY Timestamp DESC) AS Last_event
FROM
[iot-hub-data-flow] t TIMESTAMP BY Timestamp
GROUP BY
HOPPINGWINDOW(minute, 20, 1)
-- Every 1 minute, check the last 20 minutes
)
SELECT
Last_event.DevideId
FROM CTE
WHERE Last_event.Timestamp < Window_10
请注意,20 分钟后,警报停止发出。
【讨论】:
嗨@Eiden,谢谢你,我很感激你的解决方案。但是,我最终创建了一个自定义看门狗来代替监控工作。以上是关于如何使用流分析检测任何 IoTHub 设备中是不是未摄取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Azure 流分析中通过 IotHub.ConnectionDeviceId 对延迟函数进行分区?