案例集锦概述
# StreamSQL 案例集锦
本章提供了StreamSQL在各种实际业务场景中的应用案例,涵盖数据合并、变更数据捕获、实时分析等常见的流处理需求。所有案例都基于StreamSQL项目的实际源码,确保可运行性和实用性。
# 案例分类
所有案例均为 IoT 场景、SQL 已实跑验证,并提供输入/输出。运行方式见下文如何运行案例 SQL。
# 🔧 数据处理
- 数据过滤与转换 - 非聚合:过滤、算术换算、CASE 分级(
EmitSync) - 流表 JOIN 元数据增强 - 用维度表给设备读数补位置/型号等属性
# ⏱️ 窗口聚合
- 滑动窗口与持续检测 -
SlidingWindow+HAVING做"持续 N 秒超阈值" - 会话窗口与设备在线 -
SessionWindow按活动间隙切分在线会话 - IoT 温度告警与指标聚合 - 单点告警 / 滚动 / 计数 / 触发 / 全局窗口模式总览
# 🔄 变更数据捕获
- 变更数据捕获 - 分析函数(
lag/had_changed/changed_cols)做瞬时变化检测
# 每个案例包含什么
每个案例聚焦业务场景 + SQL + 输入输出,不再重复贴 Go 启动样板:
- 业务场景 - 需求背景与分析
- SQL - 完整的 StreamSQL 查询语句
- 输入 / 输出 - 模拟数据与实际运行结果
- 行为说明 - 关键语义与坑点
如何运行这些 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
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应用案例,欢迎贡献到项目中:
- Fork StreamSQL项目 (opens new window)
- 在
examples/目录下添加您的案例 - 提交Pull Request
- 我们会将优秀案例添加到文档中
让我们开始探索StreamSQL的强大功能,通过这些实际案例学习如何在生产环境中有效使用StreamSQL!
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/07/11, 04:40:00