RuleGo RuleGo
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 流式计算
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • 🌊StreamSQL
  • 🤖智能体框架
  • 🦀TPCLAW 智能体平台 (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文
🏠首页
  • 快速入门
  • 规则链
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 可视化
  • RuleGo-Server
  • AOP
  • 触发器
  • 高级主题
  • 性能
  • 标准组件
  • 扩展组件
  • 自定义组件
  • 流式计算
  • 组件市场
  • 概述
  • 快速入门
  • 路由
  • DSL
  • API
  • Options
  • 组件
🔥编辑器 (opens new window)
  • 可视化编辑器 (opens new window)
  • RuleGo-Server (opens new window)
  • 🌊StreamSQL
  • 🤖智能体框架
  • 🦀TPCLAW 智能体平台 (opens new window)
  • ❓问答

    • FAQ
💖支持
👥加入社区
  • Github (opens new window)
  • Gitee (opens new window)
  • GitCode (opens new window)
  • 更新日志 (opens new window)
  • English
  • 简体中文

广告采用随机轮播方式显示 ❤️成为赞助商
  • 概述
  • 快速开始
  • 核心概念
  • SQL参考
  • API参考
  • RuleGo集成
  • 加入社区讨论
  • Schema 校验
  • 分析函数
  • 进阶示例
  • 模式识别(MATCH_RECOGNIZE / CEP)
  • 函数

  • 案例集锦

    • 案例集锦概述
    • 流表 JOIN 元数据增强
    • 会话窗口与设备在线分析
    • 变更数据捕获案例
    • 滑动窗口与持续检测
      • 业务场景
      • SQL
      • 输入
      • 输出
      • 行为说明
      • 📚 相关文档
    • 数据过滤与转换
    • IoT 温度告警与指标聚合
    • 设备故障模式识别(MATCH_RECOGNIZE)
目录

滑动窗口与持续检测

# 滑动窗口与持续检测

# 业务场景

母线电流需要做"持续超阈值"告警:只有当过去 10 秒内的电流全部大于 200A(中间没有下跌)才算持续过载。每 2 秒滑动一次、看最近 10 秒,用 HAVING 把出现过下跌的窗口过滤掉。

# SQL

SELECT MIN(concurrency) AS mn,
       COUNT(*)         AS c
FROM stream
GROUP BY SlidingWindow('10s', '2s')
HAVING mn > 200
1
2
3
4
5
  • SlidingWindow('10s', '2s'):窗口大小 10s、每 2s 滑动一次,窗口之间有重叠(一个事件可能落在多个窗口里)。
  • MIN(concurrency) AS mn:窗口内全部事件的最小值;只要有一个事件 ≤200,mn 就 ≤200。
  • HAVING mn > 200:只保留"窗口内全部 >200"的窗口,即持续过载段。

# 输入

一段时间内的电流读数(前 10s 全部 >200;中间出现一次 180 的下跌;之后恢复):

{"concurrency": 250, "ts": 1}
{"concurrency": 260, "ts": 3}
{"concurrency": 240, "ts": 5}
{"concurrency": 180, "ts": 7}   // 下跌,包含它的窗口 min=180,被 HAVING 拦掉
{"concurrency": 270, "ts": 9}
{"concurrency": 280, "ts": 11}
1
2
3
4
5
6

# 输出

只有"窗口内全部 >200"的窗口通过 HAVING 输出;含 180 那次下跌的窗口被过滤:

{mn: 240 c: 3 ...}   // 不含下跌的窗口
{mn: 270 c: 2 ...}   // 下跌之后的窗口
(含 180 的窗口被 HAVING 拦掉,不输出)
1
2
3

# 行为说明

  • 滑动窗口会重叠:每个事件可能进入多个窗口,所以同一段时间会产生多个输出点(每 2s 一个),比滚动窗口更平滑。
  • HAVING 引用 SELECT 别名(mn),不能复述聚合函数(HAVING MIN(concurrency) > 200 不生效)。
  • min 拦 dip 的原理:窗口聚合该 10s 内的全部事件(含下跌),MIN 一旦 <200,HAVING 就把它过滤——这正是"持续"语义。
  • 区别:变更数据捕获用分析函数做"瞬时变化"检测;本案例用窗口聚合做"持续时段"检测,两者不要混。

如何运行

滑动窗口是聚合查询,用 Emit + AddSink 按批接收窗口结果。完整样板见如何运行案例 SQL。

# 📚 相关文档

  • 如何运行案例 SQL
  • SQL 参考 —— SlidingWindow、HAVING
  • 变更数据捕获 —— 瞬时变化检测(分析函数)
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/07/11, 04:40:00
变更数据捕获案例
数据过滤与转换

← 变更数据捕获案例 数据过滤与转换→

Theme by Vdoing | Copyright © 2023-2026 RuleGo Team | Apache 2.0 License

  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式