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)
目录

流表 JOIN 元数据增强

# 流表 JOIN 元数据增强

# 业务场景

设备上报的读数流里只有 deviceId 和测量值,没有设备的位置、型号等属性。这些属性相对稳定,存在一张"元数据表"里。要求:每条读数到达时,用 deviceId 关联元数据表,把位置/型号补到读数上一并输出(流表 JOIN,stream-table join)。

# SQL

SELECT deviceId,
       m.location,
       m.model,
       temperature
FROM stream JOIN meta m ON deviceId = m.deviceId
1
2
3
4
5

# 输入

设备读数流(stream):

{"deviceId": "d1", "temperature": 31.0}
{"deviceId": "d2", "temperature": 27.5}
{"deviceId": "d9", "temperature": 40.0}
1
2
3

元数据表(meta,用 RegisterTable("meta", rows) 注册):

{"deviceId": "d1", "location": "plantA", "model": "TX-100"}
{"deviceId": "d2", "location": "plantB", "model": "TX-200"}
1
2

# 输出

{"deviceId": "d1", "location": "plantA", "model": "TX-100", "temperature": 31.0}
{"deviceId": "d2", "location": "plantB", "model": "TX-200", "temperature": 27.5}
1
2

d9 在元数据表里没有匹配,默认 INNER JOIN 被丢弃。

# 行为说明

  • 默认 INNER JOIN:元数据表无匹配的读数被丢弃(如 d9)。需要保留无匹配读数时用 LEFT JOIN,未命中的表字段为 nil。
  • JOIN 在 WHERE 之前执行,所以 WHERE、GROUP BY、聚合都能引用 JOIN 进来的表字段(如 GROUP BY m.location)。
  • RegisterTable 必须在 Execute 之后调用:先 Execute(sql),再 ssql.RegisterTable("meta", []map[string]any{...}),否则 JOIN 找不到表、全部读数被丢弃。
  • 表别名 m,匹配列写 ON deviceId = m.deviceId(流字段不加别名,表字段用 m.xxx)。
  • 元数据表是"静态维度表",适合设备/用户/产品属性这类低频变更数据;高频变更维表可在节点侧定时刷新。

如何运行

JOIN 查询是非聚合查询,用 EmitSync 同步拿结果;注意 Execute 之后要用 RegisterTable 注册元数据表。完整样板见如何运行案例 SQL。

# 📚 相关文档

  • 如何运行案例 SQL
  • SQL 参考 —— JOIN 语法
  • API 参考 —— RegisterTable
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/07/11, 04:40:00
案例集锦概述
会话窗口与设备在线分析

← 案例集锦概述 会话窗口与设备在线分析→

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

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