在工业现场,时序数据库要做的早已不只是存数据。设备到工厂的逐层汇总、多级告警、跨系统的工单和质检闭环,往往要拆成多条流任务;设备模型一多,公共字段反复定义,底层一改上层全部跟着改;读数和台账、告警、历史水平放在一起看,又要写多段 SQL 再在应用层拼接。
TDengine TSDB 3.4.3.3 围绕流计算、虚拟表和查询关联持续增强。本文梳理这三个方向的主要更新,帮助你快速了解哪些能力可以直接替代原来的多任务、多模型和应用层拼接。
重要更新亮点
流计算支持分层规则与跨源闭环
新版本让看板、告警和跨系统闭环可以在一条流里完成:设备数据按路径逐层汇总,多级告警写成一条规则,订单内的计算不跨过订单边界,本地测点和外部工单、质检一起触发计算。流的运行状态可以直接查看,告警通知不再拖慢计算,集群切主和模型变更时流保持运行。
层级汇总:一条流算出产线、车间和工厂
新增 ROLLUP BY,按路径型标签(如 工厂A.车间1.产线2)自动展开祖先路径,一条流同时产出每一层的汇总结果,父级自动包含全部下级数据,无需为每一层单独建流。适用于分层能耗看板、多级产能统计等场景。
CREATE STREAM s_energy_rollup INTERVAL(1m) FROM meters
ROLLUP BY location
INTO meters_rollup OUTPUT_SUBTABLE(CONCAT('rollup_', %%1))
AS SELECT _twstart, SUM(power), _trollup_tbcount FROM meters WHERE ...;
事件窗口支持多级开始条件与防抖
事件窗口的开始条件可以写成多层嵌套的条件树。不同级别的条件满足时触发对应的子事件窗口,系统自动维护父子窗口的开关关系,并通过 _event_condition_path 标识触发路径,便于按告警级别分流结果。同时,开窗和关窗可以分别要求连续满足一定时长或行数,短时抖动不再反复告警。适用于分级告警、状态升级、阈值递进等场景。
EVENT_WINDOW(START WITH ((cond_1, cond_2), cond_3) [END WITH end_cond])
EVENT_WINDOW(START WITH start_cond END WITH end_cond) TRUE_FOR(start(COUNT n), end(duration))
嵌套窗口:先划业务边界,再在边界内计算
新增嵌套窗口,支持 2 到 8 层窗口链。外层按订单、会话、批次划定业务范围,内层在范围内做相邻采样、计数或定时统计。换单、断会话时内层自动重置,前后两单的数据不会被配成一对。适用于充电订单、生产批次、在线会话等分段计算场景。
WINDOW (
STATE_WINDOW(order_id) EXTEND(1) AS order_scope,
COUNT_WINDOW(2, 1) AS pair
)
自然周期与时区跟随流定义
流计算支持按自然周、月、季、年触发和结算。每条流可以在 STREAM_OPTIONS(CONFIG(...)) 中固定自己的时区和一周起始日,之后客户端或服务端时区的变化不会改变这条流的窗口边界。适用于跨地区部署的月报、季报和周报。
STREAM_OPTIONS(CONFIG(timezone = 'Asia/Shanghai', firstDayOfWeek = 1))
外部业务数据直接参与流计算(企业版)
MySQL、PostgreSQL、InfluxDB 中的工单、质检等外部表可以直接作为流的触发表,也可以出现在计算语句中。本地测点和外部质检数据还可以合成一张虚拟表后再触发,结果写回本地表,无需先建同步任务。适用于工单驱动看板、产线质量一体汇总等场景。
运行可观测、通知异步化与高可用
流的延迟、处理速率、历史进度、失败原因和重算记录可在系统表、taosExplorer 和 TDinsight 中直接查看,启动、停止和重算可在 taosExplorer 页面上完成。事件通知改为异步批量发送,接收端变慢时计算和写入不受影响;wss:// 通知默认校验服务端证书。源 vnode 切主、vgroup 重新分布或虚拟表引用变更后,流继续输出正确结果,无需重新部署。
虚拟表支持模型继承与跨层引用
新版本让虚拟表可以像设备模型一样分层组织:公共字段在父模型中定义一次,上层模型逐层引用下层的列和标签,个别设备可以单独扩展测点。同时支持批量建删、外部数据按条件绑定、跨精度引用,引用断开时可直接定位到失效的对象。
虚拟超级表继承
新增 BASE ON,虚拟超级表可以从一个或多个父模型继承列和标签,公共字段只需定义一次。查询父模型时自动覆盖全部后代设备,便于构建「基础设备—电力设备—变压器」这类分层设备模型。
CREATE STABLE transformer_vst (ts TIMESTAMP, oil_temp FLOAT)
TAGS (model NCHAR(32))
BASE ON base_device, base_power VIRTUAL 1;
列和标签跨层引用
虚拟表的列和标签都可以引用其他虚拟表,多层模型只需在最底层对接物理表。虚拟普通表和普通表也支持标签,并可以作为标签引用的来源逐层传递。底层数据或标签发生变化,上层查询立即可见,一处修改各层同时生效。
CREATE VTABLE top_d1001 (top_cur FROM mid_d1001.cur)
USING top_vst TAGS (area FROM mid_d1001.city);
单表扩展与批量管理
虚拟子表可以添加模型之外的自有列和自有标签,个别设备多出的测点无需修改整个模型。一条 CREATE VTABLE 可以创建多张虚拟子表,一条 DROP VTABLE 可以跨库删除多张虚拟表,虚拟设备的批量上线和清理更加高效。超级表和虚拟超级表也支持直接修改列名。
CREATE VTABLE
IF NOT EXISTS v_d1001 (...) USING meters_vst TAGS (...)
IF NOT EXISTS v_d1002 (...) USING meters_vst TAGS (...);
DROP VTABLE IF EXISTS v_d1001, v_d1002;
外部列按条件绑定(企业版)
引用 MySQL、PostgreSQL 外部表的列时,可以附加过滤条件,只取当前设备、产线或租户的数据行,再与本地列按时间戳对齐。外部列参与窗口、聚合和 INTERVAL 查询时,计算可下推到外部数据源执行。适用于多条产线质检数据混存在一张外部表中的场景。
quality INT FROM mysql_qms.qms.line_quality.score WHERE line_id = 'L1'
跨精度引用与精确分位数
一张虚拟表可以同时引用毫秒、微秒、纳秒精度数据库中的表,查询时自动换算为虚拟表所在库的精度,不同采样精度的测点可以合到一张表中分析。列来自同一张物理表的虚拟子表和虚拟普通表支持精确的 PERCENTILE 计算,结果与直接查询物理表一致。
引用校验与断链定位
在变更源表前可以校验虚拟表引用的完整性。源库、源表或源列失效时,查询报错和 SHOW VTABLE VALIDATE 会明确指出失效对象,并给出完整引用链,多层模型出现问题时可以快速定位到断开的那一层。
SHOW VTABLE VALIDATE;
查询关联与子查询能力增强
新版本放宽了普通 JOIN 的条件限制,支持多种关联在一条 SQL 中混合嵌套,子查询可以引用外层当前行,窗口查询可以同时输出原始数据和变化量。读数、台账、告警、历史水平和临时数据可以在一条 SQL 中完成关联分析。
普通 JOIN 支持业务列与任意条件关联
普通 JOIN 不再要求主时间戳等值,可以按分组号、设备号等业务列关联,也可以按表达式、范围或 OR 组合条件关联。台账、配置表和聚合结果可以直接参与 JOIN。系统根据条件和输入顺序在 Merge、Hash、Theta 算法间自动选择,无需额外排序,也可以通过 JOIN_ALGO Hint 指定偏好。
SELECT m.ts, m.voltage, g.area
FROM meters m JOIN group_info g ON m.groupId = g.group_id;
多表混合嵌套与时序关联
内连接、外连接可以与 ASOF JOIN、WINDOW JOIN 在一条 SQL 中按括号嵌套组合,流计算中同样支持。ASOF JOIN 和 WINDOW JOIN 的输入可以是子查询、虚拟表或其他 JOIN 的结果,WINDOW JOIN 可以通过 WINDOW_TIME 指定对齐的时间列。适用于「读数关联台账,再匹配最近一条告警」这类多表分析。
标量子查询与相关子查询
支持非相关标量子查询,以及 IN、EXISTS、ANY、ALL 子查询,可以用在选择列表、过滤条件和关联条件中。新版本进一步支持标量相关子查询,子查询可以引用外层当前行,「每条读数与本设备历史均值比较」一条 SQL 即可完成。HAVING 也可以在不分组时使用。
SELECT r.ts, r.voltage,
(SELECT AVG(h.voltage) FROM meter_history h WHERE h.device_id = r.device_id)
FROM current_readings r;
窗口查询表达能力增强
窗口查询可以输出原始列、标签列和标量表达式,并在窗口内使用 DIFF、CSUM、MAVG、LAG、LEAD 等序列函数,同时看到明细和变化量。状态窗口支持多个状态键,任一状态变化即切换窗口;按事件或班次定义的外部窗口支持 FILL,没有数据的窗口也能输出。结果中没有时间列时,序列函数按输入顺序计算。
TEXT / FILE 内联数据源
新增 TEXT 和 FILE 数据源:TEXT 将少量数据直接写在 SQL 中,FILE 直接读取 CSV 文件。两者都可以参与查询、JOIN、UNION、窗口计算和 INSERT INTO ... SELECT,校准系数、班次表等临时数据无需先建表导入。
SELECT m.ts, m.current * cal.factor
FROM d1001 m JOIN TEXT(ts TIMESTAMP, factor FLOAT) VALUES (...) cal ON m.ts = cal.ts;
其他优化
- 新增函数
BIT_CHANGES、VALUE_CHANGES和时间加权聚合TWAVG、TWSUM、TWVAR,支持CSUM(expr) OVER (PARTITION BY ... ORDER BY ...) DELETE支持按普通列过滤,可与时间范围和标签条件组合- 按 tbname 分组的
INTERVAL、分组 last 查询、超级表INTERP和分区状态窗口性能优化;新增FAST_INTERVAL、EX_INTERVALHint,符合条件的查询可从副本读取 SHOW TABLE DISTRIBUTED支持汇总超级表全部子表的压缩数据块大小- split vgroup、
REDISTRIBUTE VGROUP和多副本切主后的恢复效率提升;BALANCE VGROUP LEADER新增FORCE强制均匀 - 新增
compactSpeedLimitMB限制COMPACT写盘速度,新增snapshotMediumOnLag让落后副本用文件级增量快照追赶 - BLOB 单值上限从 4MB 提升至 16MB;复合主键支持
TIMESTAMP列 - Last Cache 的 RocksDB 参数可配置,并新增
information_schema.ins_last_cache_stats;SHOW VARIABLES新增reboot列 - STMT2 在执行出错后可继续复用同一语句,并支持
UPDATE参数绑定;JDBC WebSocket 新增 PreparedStatement 缓存 - XNode 支持 DSN 加密保护和
RESTART XNODE,任务和作业在重连后自动恢复到期望状态 - 提供 Spark JDBC 方言,PySpark 可通过 WebSocket 访问 TDengine;taosAdapter 支持 InfluxDB 1.x ping 接口;taosgen 提供 gRPC 写入接口
- 社区版支持 Rocky Linux 和 AlmaLinux,并支持免费许可
- 安全修复:拒绝会导致服务崩溃或越界读写的畸形输入,修复同步模块的已知漏洞,Grafana 数据源插件修复 30 项依赖漏洞
除此之外,每个版本都会做很多其他的工作,比如 bug 修复、功能优化、安全加固等等。如果想要了解新版本更加详细的发布信息,可以移步至 https://github.com/taosdata/TDengine/releases 查看发布说明。
欢迎大家下载使用,也欢迎在评论区提出建议和意见,如有任何问题请及时联系我们获得支持。

























