在工业现场,时序数据库要做的早已不只是存数据。设备到工厂的逐层汇总、多级告警、跨系统的工单和质检闭环,往往要拆成多条流任务;设备模型一多,公共字段反复定义,底层一改上层全部跟着改;读数和台账、告警、历史水平放在一起看,又要写多段 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 不再要求主时间戳等值,可以按分组号、设备号等业务列关联,也可以按表达式、范围或
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 将少量数据直接写在 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_INTERVAL Hint,符合条件的查询可从副本读取
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 查看发布说明。
欢迎大家下载使用,也欢迎在评论区提出建议和意见,如有任何问题请及时联系我们获得支持。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70014783/viewspace-3186062/ ,如需转载,请注明出处,否则将追究法律责任。