You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Stream Analytics车辆传感器异常检测问询:手刹行驶场景实现

Azure Stream Analytics 手刹行驶异常检测方案

是否需要拆分多个ASA作业?

不需要,单个ASA作业即可完成整个检测逻辑。通过CTE(公共表表达式)结合会话窗口,就能在单作业内完成数据透视、状态持续检测和异常筛选的全流程。

完整查询语句方案

假设你已经通过CROSS APPLY拆分得到的输入流名为SplitSensorData,包含字段:vehicle_id(车辆标识)、sensor_id、sensor_value、event_time(传感器数据的实际生成时间,需在ASA输入配置中指定为时间戳列)。

步骤1:数据透视(整合单车辆的多传感器数据)

先将同一车辆、同一时间点的手刹(sensor_id=12)和速度(sensor_id=55)数据合并为单行,方便后续状态判断:

WITH PivotedSensorData AS (
    SELECT
        vehicle_id,
        event_time,
        -- 提取手刹状态
        MAX(CASE WHEN sensor_id = 12 THEN sensor_value END) AS handbrake_status,
        -- 提取速度值并转换为浮点型(处理字符串格式的数值)
        MAX(CASE WHEN sensor_id = 55 THEN TRY_CAST(sensor_value AS FLOAT) END) AS speed
    FROM SplitSensorData
    GROUP BY vehicle_id, event_time
),

步骤2:会话窗口检测持续异常状态

使用会话窗口(Session Window)将连续满足"手刹开启+速度>10"的事件聚合为一个会话,当超过指定间隙时间(无满足条件的事件)则结束会话,最后筛选持续时长≥3秒的异常会话:

AnomalySessions AS (
    SELECT
        vehicle_id,
        MIN(event_time) AS anomaly_start_time,
        MAX(event_time) AS anomaly_end_time,
        DATEDIFF(second, MIN(event_time), MAX(event_time)) AS anomaly_duration
    FROM PivotedSensorData
    -- 过滤单次满足条件的事件
    WHERE handbrake_status = 'on' 
        AND speed > 10
        AND speed IS NOT NULL -- 排除速度转换失败的无效数据
    -- 会话间隙设为1秒:1秒内无满足条件的事件则终止当前会话
    GROUP BY vehicle_id, SessionWindow(second, 1)
)
-- 输出最终异常结果
SELECT
    vehicle_id,
    anomaly_start_time,
    anomaly_end_time,
    anomaly_duration,
    '手刹行驶异常' AS anomaly_type
FROM AnomalySessions
WHERE anomaly_duration >= 3

关键配置与注意事项

  • 时间戳配置:必须确保event_time是传感器数据的实际生成时间,而非ASA的接收时间,否则窗口计算会出现偏差。在ASA输入设置中,将"时间戳列"指定为event_time。
  • 数据类型转换:使用TRY_CAST而非CAST处理速度值转换,避免因数据格式错误导致作业中断。
  • 会话间隙调整:根据你的传感器数据上报频率调整会话窗口的间隙时间(示例中为1秒)。如果数据上报频率较高(如每500ms一次),可适当缩小间隙;若上报间隔不稳定,可放大间隙避免正常连续状态被误拆分。

内容的提问来源于stack exchange,提问作者mananana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 04:26:05