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 校验
  • 分析函数
  • 进阶示例
  • 函数

  • 案例集锦

    • 案例集锦概述
      • 案例分类
        • 🔧 数据处理
        • ⏱️ 窗口聚合
        • 🔄 变更数据捕获
      • 每个案例包含什么
      • 如何运行案例 SQL
        • 案例特点
      • 🔗 相关资源
      • 💡 贡献案例
    • 流表 JOIN 元数据增强
    • 会话窗口与设备在线分析
    • 变更数据捕获案例
    • 滑动窗口与持续检测
    • 数据过滤与转换
    • IoT 温度告警与指标聚合
目录

案例集锦概述

# StreamSQL 案例集锦

本章提供了StreamSQL在各种实际业务场景中的应用案例,涵盖数据合并、变更数据捕获、实时分析等常见的流处理需求。所有案例都基于StreamSQL项目的实际源码,确保可运行性和实用性。

# 案例分类

所有案例均为 IoT 场景、SQL 已实跑验证,并提供输入/输出。运行方式见下文如何运行案例 SQL。

# 🔧 数据处理

  • 数据过滤与转换 - 非聚合:过滤、算术换算、CASE 分级(EmitSync)
  • 流表 JOIN 元数据增强 - 用维度表给设备读数补位置/型号等属性

# ⏱️ 窗口聚合

  • 滑动窗口与持续检测 - SlidingWindow + HAVING 做"持续 N 秒超阈值"
  • 会话窗口与设备在线 - SessionWindow 按活动间隙切分在线会话
  • IoT 温度告警与指标聚合 - 单点告警 / 滚动 / 计数 / 触发 / 全局窗口模式总览

# 🔄 变更数据捕获

  • 变更数据捕获 - 分析函数(lag/had_changed/changed_cols)做瞬时变化检测

# 每个案例包含什么

每个案例聚焦业务场景 + SQL + 输入输出,不再重复贴 Go 启动样板:

  1. 业务场景 - 需求背景与分析
  2. SQL - 完整的 StreamSQL 查询语句
  3. 输入 / 输出 - 模拟数据与实际运行结果
  4. 行为说明 - 关键语义与坑点

如何运行这些 SQL

所有案例的 SQL 都用同一套启动样板运行,见下文如何运行案例 SQL。

# 如何运行案例 SQL

案例里只给 SQL 和输入输出;要真正跑起来,用下面这段统一的 Go 样板——把案例 SQL 粘进 sql 变量、按案例给的输入发数据即可。

go get github.com/rulego/streamsql
1
package main

import (
	"fmt"
	"time"

	"github.com/rulego/streamsql"
)

func main() {
	ssql := streamsql.New()
	defer ssql.Stop()

	// ① 把案例里的 SQL 粘贴到这里
	sql := `SELECT deviceId, temperature FROM stream WHERE temperature > 30`
	if err := ssql.Execute(sql); err != nil {
		panic(err)
	}

	// ② 二选一:看案例属于"非聚合"还是"聚合/窗口"

	// 方式 A:非聚合查询(无 GROUP BY/窗口)用 EmitSync,同步拿单条结果
	// result, err := ssql.EmitSync(map[string]any{"deviceId": "d1", "temperature": 32.0})
	// fmt.Println(result)

	// 方式 B:聚合 / 窗口查询用 Emit + AddSink,窗口关闭时按批回调
	ssql.AddSink(func(batch []map[string]any) {
		for _, row := range batch {
			fmt.Printf("%+v\n", row)
		}
	})
	ssql.Emit(map[string]any{"deviceId": "d1", "temperature": 32.0})

	time.Sleep(500 * time.Millisecond) // 等异步 sink 落盘
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

按查询类型选 API:

查询类型 用什么 说明
非聚合(过滤/转换/分析函数) EmitSync(data) 同步返回单条结果;不命中 WHERE 返回 nil
聚合 / 窗口 / 全局窗口 Emit(data) + AddSink(...) 窗口关闭时按批回调

测试时间窗口免 sleep

写测试或想立刻看到时间窗口的输出时,用 ssql.TriggerWindow() 立即冲窗口,不必 time.Sleep 等窗口到期。详见 IoT 温度告警案例 · 场景 D。

# 案例特点

  • ✅ 基于实际源码 - 所有案例都基于StreamSQL项目的实际功能
  • ✅ SQL 可直接粘贴运行 - 用上面的统一样板即可
  • ✅ 业务导向 - 面向实际业务场景,具有实用价值
  • ✅ 循序渐进 - 从简单到复杂,便于学习和理解
  • ✅ 最佳实践 - 体现StreamSQL的最佳使用方式

# 🔗 相关资源

  • StreamSQL 快速开始 - 基础入门教程
  • SQL参考手册 - 完整的SQL语法参考
  • API参考文档 - 详细的API说明

# 💡 贡献案例

如果您有好的StreamSQL应用案例,欢迎贡献到项目中:

  1. Fork StreamSQL项目 (opens new window)
  2. 在examples/目录下添加您的案例
  3. 提交Pull Request
  4. 我们会将优秀案例添加到文档中

让我们开始探索StreamSQL的强大功能,通过这些实际案例学习如何在生产环境中有效使用StreamSQL!

在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/07/11, 04:40:00
自定义函数
流表 JOIN 元数据增强

← 自定义函数 流表 JOIN 元数据增强→

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

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