ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

TDengine 3.4.2.2 版本特性解析:虚拟表联邦查询、内联数据源、自然时间窗口与工程加固

TDengine 3.4.2.2 版本特性解析:虚拟表联邦查询、内联数据源、自然时间窗口与工程加固 TDengine 3.4.2.2 版本特性解析虚拟表联邦查询、内联数据源、自然时间窗口与工程加固【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine版本发布说明解读 · TDengine v3.4.2.2发布于 2026-07-22TDengine 3.4.2.2 是 3.4 系列的一个重要迭代版本围绕虚拟表与联邦查询、SQL 查询能力扩展、流计算增强、taosX 数据集成、安全加固与稳定性修复五大方向发布了 26 项新特性、34 项优化与 43 项修复。本文以官方版本说明为骨架结合当前仓库中的源码与配套文档逐条拆解本版本的核心变化帮助读者理解每个特性背后的实现原理、适用场景与升级价值。读完本文你将能快速评估该版本是否值得升级、新语法如何使用以及各模块改动对应的底层实现位置。一、虚拟表体系全面增强联邦查询走向成熟虚拟表Virtual Table是 TDengine 中一类不直接存储数据的逻辑表查询时系统会根据虚拟表定义从一个或多个真实表或已有虚拟表中读取列数据并按时间戳对齐后生成结果可用于跨数据库、跨集群实例的数据联邦查询。相关语法与使用说明详见 虚拟表文档。本版本围绕虚拟表推出了四项相互关联的能力使联邦查询方案趋于完整支持基于虚拟表实现联邦查询虚拟表的数据源可以来自远程数据库配合虚拟表的列引用与标签引用机制即可用一条 SQL 完成对多个数据源的统一查询。从源码结构看虚拟表查询在执行层由专门的算子承载例如 virtualtablescanoperator.c 中的SVirtualTableScanInfo结构负责维护虚拟表扫描过程中的标签引用块tag-ref block与列引用组ref-slot group实现跨表的按时间戳对齐读取。虚拟超级表可继承其他虚拟超级表虚拟超级表本身作为模板定义一组虚拟子表的公共列和标签现在它还可以基于另一张虚拟超级表构建形成模板的层次化复用。虚拟子表标签列支持引用物理子表和其他虚拟子表的标签标签值既可以是常量也可以通过 tag-ref 引用方式动态取自其他表的标签列使得虚拟子表的标签可以在数据源标签变化时自动联动。虚拟普通列的引用范围扩展虚拟子表的普通列除引用物理子表外现在也支持引用其他虚拟子表进一步打通虚拟表之间的数据链路。这四项特性在语法上统一体现为CREATE VTABLE语句中FROM关键字的引用语义列引用的形式为[stb_col_name FROM] [db_name.]table_name.col_name标签引用则支持FROM [db_name.]table_name.tag_name及不带FROM的简写形式设计上保持一致。批量创建虚拟子表时一条语句可包含多个建表子句且系统会在发送建表请求前校验全部子句任一子句存在元数据或引用错误时整批不创建。此外本版本还修复了虚拟表与底层表结构变更相关的若干问题包括虚拟表创建后底层超级表结构变更引发列顺序不匹配报错修复 2、BIMode 开启时虚拟超级表使用last()/first()/last_row(*)查询不返回tbname标签列修复 13以及扫描information_schema.ins_tags解析虚拟表 tag-ref 时元数据读锁重入导致 taosd 死锁修复 39。同时流计算也新增了对虚拟表跨表引用及标签引用的支持优化 11并优化了虚拟超级表的聚合查询执行逻辑优化 12说明虚拟表能力已从静态查询场景延伸至实时流计算场景。二、内联数据源TEXT 与 FILE免建表的即席查询本版本新增TEXT和FILE两种内联数据源允许直接在 SQL 的FROM子句中使用行值数据或 CSV 文件作为查询表源无需预先创建持久化表可参与SELECT、JOIN、UNION及INSERT INTO SELECT等操作。两种内联数据源的语法在解析器中有明确对应的规则见 sql.y-- 行值数据源直接在 SQL 中给出多行数据 SELECT ... FROM TEXT(col1, col2, ...) VALUES (v1, v2), (v3, v4), ... [alias] -- CSV 文件数据源指定文件路径与列定义 SELECT ... FROM FILE(path, col1, col2, ...) [alias] -- 带选项的 CSV 文件数据源 SELECT ... FROM FILE(path, col1, col2, ... [, namevalue, ...]) [alias]其中FILE数据源的文件选项以逗号分隔的namevalue形式提供支持通过选项控制 CSV 是否包含表头header以及自定义分隔符delimiter默认分隔符为逗号。使用场景示例将一段临时数据与数据库中的真实表做JOIN对比、将外部导出的 CSV 文件直接参与聚合查询、或用INSERT INTO SELECT将 CSV 文件内容批量灌入目标表。该特性大幅降低了临时性数据分析的门槛——省去了建表 → 导入 → 查询 → 删表的繁琐流程。三、窗口查询能力扩展自然时间窗口、FILL 与窗口函数本版本在时间序列查询的窗口体系上有多处重要更新与 窗口子句说明 及 查询语句文档 中的相关章节一一对应。3.1 自然时间单位窗口与季度单位新增按自然时间单位的窗口查询窗口自动对齐本地日历边界如按自然日、自然周、自然月对齐而非简单地从 Unix 时间 0 起算固定秒数。这在业务上更符合按天报表按月结算等以自然日历划分统计周期的场景。连接级时区设置时区按SQL 参数 → 连接 → 全局配置逐级生效支持 IANA 时区名称并自动处理夏令时DST。这意味着不同连接可以使用不同时区执行同一查询结果中的自然窗口边界会随连接时区变化多区域业务可按各自本地时间出报表。查询语句支持季度时间单位优化 1在 时间单位文档 中q表示自然季度等价于 3 个自然月属于日历单位仅可用于INTERVAL窗口不可用于时间运算、EVERY、SURROUND等场合。这一约束在时间相关类型定义中也有体现参见 ttime.h 对日历时间时长类型的区分。3.2 外部窗口支持 FILL 子句外部窗口External Window用于先定义窗口再在窗口内计算其时间范围由子查询显式给出。本版本为外部窗口补齐了FILL子句使窗口内无数据时可以按指定的填充策略补值SELECT ... FROM table_name [PARTITION BY expr_list] EXTERNAL_WINDOW ( (subquery_that_defines_windows) window_alias ) [FILL(fill_mode_and_val)] [HAVING condition] [ORDER BY ...]子查询的前两列必须是TIMESTAMP类型分别表示窗口开始与结束时间第 3 列及之后的列作为窗口属性列须通过w.column_name形式引用。结合FILL后即使某个外部窗口范围内没有任何数据也能按填充模式输出聚合结果行避免报表出现空洞。3.3 状态窗口多状态列划分状态窗口STATE_WINDOW此前按单个状态列划分窗口本版本支持通过多个状态列组合划分窗口满足复合状态机如同时监控温度与压力的工况分段的分析需求。3.4 窗口内函数使用限制放宽允许原始列、标签列、标量函数、不定行函数在窗口查询中使用特性 9支持在窗口查询中使用时序计算函数CSUM、DIFF、DERIVATIVE、MAVG、STATECOUNT、STATEDURATION、LAG、LEAD、FILL_FORWARD并支持这些函数搭配INTERVAL FILLNULL/NONE/VALUE/NULL_F/VALUE_F使用优化 7。需要说明的是不定行函数与INTERVAL联用时仅支持上述填充模式不支持FILL(PREV)、FILL(NEXT)、FILL(LINEAR)与FILL(NEAR)见 查询文档无时间列场景下diff、csum、mavg、statecount、lag、lead、fill_forward、unique等函数也可正常执行优化 34完善函数分类规则放宽部分函数的使用限制优化 6。3.5 窗口函数与 OVER 子句本版本支持标准 SQL 的窗口函数与OVER子句。窗口函数会为结果集中的每一行计算一个值计算时可引用同一窗口内的其他行但不会把多行折叠成一行——这与时间窗口的多行聚合成一行形成鲜明对比。基本调用形式为function_name ( [ arguments ] ) OVER ( [PARTITION BY ...] [ORDER BY ...] [window_frame] )既支持已有聚合/选择函数如avg、sum、first配合OVER使用也支持row_number、rank、dense_rank、percent_rank、cume_dist、lag、lead、first_value、last_value、nth_value等专用窗口函数。此外聚合函数中新增对DISTINCT关键字的支持特性 14例如COUNT(DISTINCT col)可在一趟聚合中完成去重计数。3.6 相关性能优化优化Interp插值查询性能优化 2优化查询有效时间线列选取逻辑支持子查询、UNION ALL、多层嵌套查询场景自动选用结果集中TIMESTAMP字段作为降级主键时间线优化 3提升子查询包含主键列排序场景的执行效率优化 4子查询数据扫描时取子查询与外层时间范围的交集进行扫描优化 5Greatest/Least函数支持忽略NULL值可通过配置参数ignoreNullInGreatest控制优化 8。四、新函数REGEXP_EXTRACT 与 SLEEP4.1 REGEXP_EXTRACT正则捕获组提取REGEXP_EXTRACT(expr, pattern [, group_idx])对expr应用 POSIX 扩展正则表达式pattern返回第group_idx个捕获组匹配的子串无匹配、expr或pattern为NULL时返回NULL。返回结果类型与expr相同VARCHAR或NCHAR。完整说明见 函数文档。使用要点group_idx为非负整数常量默认10返回整个匹配串最大值 512若为 SQLNULL则返回NULL若group_idx超过pattern中的捕获组数量或对应捕获组未参与匹配返回NULLpattern必须为常量字面量或预处理占位符不可引用列也不支持concat(a,b)这类常量表达式。示例SELECT REGEXP_EXTRACT(2026-04-22, ([0-9]{4})-([0-9]{2})-([0-9]{2}), 1); -- 返回 2026 SELECT REGEXP_EXTRACT(2026-04-22, ([0-9]{4})-([0-9]{2})-([0-9]{2}), 0); -- 返回 2026-04-22 SELECT REGEXP_EXTRACT(no-digits-here, [0-9], 1); -- 返回 NULL从源码看该函数在 builtins.c 的translateRegexpExtract中做了严格的编译期校验pattern必须是字面量或参数常量节点QUERY_NODE_VALUE并以 POSIX ERE 模式REG_EXTENDED执行regcomp预编译校验NCHAR 类型的 pattern 会先转换为 UTF-8 再参与校验。group_idx必须是整数常量范围在 0 到 512REGEXP_EXTRACT_MAX_GROUP_IDX之间对于预处理语句占位符placeholder因绑定值尚未确定校验会推迟到运行时由regexpExtractFunction执行。4.2 SLEEP模拟超时与延迟场景SELECT SLEEP(seconds);暂停执行指定的秒数返回值为 INT正常结束返回 0。该函数主要用于模拟超时场景如测试连接超时、服务端过载行为详见 函数文档。参数行为secondsDOUBLE 类型支持小数如 0.5负数或NULL跳过休眠并返回 0非数值类型报类型不匹配错误。示例SELECT SLEEP(2); -- 休眠 2 秒 SELECT SLEEP(0.5); -- 休眠 500 毫秒 SELECT SLEEP(-1); -- 立即返回 0 SELECT SLEEP(NULL); -- 立即返回 0 SELECT SLEEP(1), col1 FROM table1; -- 表查询中对每行各求值一次MySQL 兼容在表查询中SLEEP对每行各求值一次MySQL 兼容总等待时间等于各行 duration 之和。其翻译函数translateSleep在 builtins.c 中定义了返回类型为TSDB_DATA_TYPE_INT。五、流计算增强本版本对流计算Stream Computing模块有多项增强覆盖窗口、触发、查询执行与运维事件窗口true_for独立判定流计算事件窗口的true_for语句支持独立设置开始与结束条件的判断规则特性 15使窗口打开与关闭可以由不同的布尔表达式驱动。联邦查询支持流计算任务支持执行联邦查询特性 16可将远程数据纳入实时计算链路。ROLLUP BY 子句流计算触发新增ROLLUP BY tag_name子句支持按标签层级逐层汇总计算结果特性 17。该语法在解析器中已有明确支持stream_rollup_by_opt(A) :: ROLLUP BY column_name(B)见 sql.y同时ROLLUP也作为数据库级权限类型PRIV_DB_ROLLUP出现在权限模型中。COUNT_WINDOW 历史重算支持COUNT_WINDOW (N, 1)计数窗口执行历史数据重算优化 10。运维与可靠性show streams支持指定数据库且可用LIKE模糊匹配流名称优化 13修复了流计算中未使用INTO子句时事件通知失败修复 3、分组数量达 50-100 万时启动缓慢修复 4、初始化表列表失败未校验错误码导致 taosd 崩溃修复 5、单次触发生成多窗口时标量子查询搭配窗口伪列无结果修复 6、fill_history阈值配置下空表写入阈值前数据误触发历史回填修复 40等问题。流计算相关实现可参见 vnodeStreamVTable.c其中承载了流任务与虚拟表VTable交互的解析、合并与同步逻辑是本版本流计算虚拟表引用能力的核心载体。六、运维、集群与数据安全6.1 新配置参数本版本新增/公开了若干配置参数均已在 tglobal.c 中注册可直接写入taos.cfg或通过系统配置接口动态调整参数类型默认值取值范围作用域说明retryOnOverloadBaseIntervalINT32100100–60000客户端全局服务器过载时请求重试的基础间隔毫秒与retryOnOverloadTimeout配合决定重试策略retryOnOverloadTimeoutINT3210001000–3600000客户端全局过载重试的总超时上限毫秒snapshotRateLimitINT3200–10240服务端可动态调整多副本传输快照时磁盘读取速度上限MB/s0 表示不限制其中过载重试参数在客户端初始化时会透传给 RPC 层见 clientEnv.c 中rpcInit.retryOnOverloadBaseInterval与rpcInit.retryOnOverloadTimeout的赋值。snapshotRateLimit则与快照限速器的创建逻辑相关联参见 syncSnapshot.h 中的snapshotRateLimiterCreate用于控制多副本数据恢复时对磁盘的读压力。6.2 CPU 亲和性与 vnode 运维支持 CPU 亲和性绑定特性 10可将指定 vnode 或进程绑定到特定 CPU 核心降低调度抖动带来的延迟波动适合对时延敏感的采集与查询场景。仓库中已有对应的系统化测试用例见 34-CpuAffinity 测试目录如test_cpu_affinity_switch.py、test_cpu_affinity_edge_cases.py、test_cpu_management_cores.py。支持运行时临时关闭指定 vnode优化 20便于开展磁盘维护、硬件更换等运维操作无需停整个 dnode。taosd -r新增--vnode参数优化 21指定需要修复的 vnode实现精确到节点的数据修复。6.3 集群与复制优化多副本快照文件同步逻辑支持按需传输文件显著提升数据恢复速度优化 18优化集群无 snode 节点时创建 TSMA 失败的错误提示优化 19修复动态开启 IP 白名单后 Dnode 自身 FQDN 未加入名单导致集群节点无法登录修复 9、集群三副本 MNode 间用户 TOKEN 同步不及时导致新建 XNode 鉴权失败持续离线修复 42等问题。6.4 客户端与连接器新增数据修复工具的拷贝修复模式特性 19C / Go / NodeJs / Python 四种 Websocket 连接器均支持 Adapter 高可用特性 20-23WebSocket 接入层的单点故障风险得到系统性消除taos_stmt2接口支持全量 SQL 语句解析与执行优化 22STMT 参数绑定场景下执行带interval的 SELECT 查询阻塞修复 15与异步写入报错后再次绑定执行导致崩溃修复 16均已修复修复普通用户写入时表不存在且无通配权限的报错语义应返回Table does not exist修复 8、Schemaless 写入报Invalid schema version修复 17等问题。七、taosX 数据集成能力升级本版本在数据集成工具 taosX 上投入了大量改动覆盖导出、备份、源接入与稳定性导出为 Parquet 文件特性 24DataOut 新增 Parquet 输出便于与大数据生态Spark、Flink、Presto 等对接导出到 Kafka特性 25taosX DataOut 支持将数据导出到 Kafka打通流式数据管道OPC UA 告警与事件采集特性 26OPC UA 数据源新增 Alarm Events 采集能力从采数据延伸到采告警备份与恢复增强支持备份与恢复指定的数据表优化 30修复了向 S3 对象存储备份/恢复失败修复 25、失败备份任务无法删除修复 27、定时增量备份偶现数据缺失修复 28、备份任务在 taos-explorer 中不显示修复 29等问题源接入修复修复了 PI Dataset Filter 配置异常修复 22、双活任务空连接指针导致任务终止修复 23、InfluxDB 高基数下同步缓慢修复 24、Kafka 多转换规则序号错误导致空字段修复 31、PI Connector 的 Int16 被误当 Int32修复 33、FFI 边界跨 allocator 释放崩溃修复 34等问题点位名称处理接入 pspace 数据时支持按/拆分点位长名称生成子标签同时保留原始长名称标签并提供name变量优化 29。八、taosdump、taos-explorer 与平台适配taosdump 性能大幅提升备份速度、恢复速度与备份文件压缩比均得到优化优化 23并支持导出流计算创建语句优化 24、优化-p参数密码错误提示优化 25taos-explorer优化批量上传 CSV 文件导入数据库的处理逻辑优化 27、数据库对象树形展示优化 28修复普通表无法展示修复 19、用户授权仍沿用旧版 RBAC 语法报错修复 20、表格滚动条无法选中修复 21等问题Windows 平台新增 MQTT 订阅功能优化 31与 UDF 支持优化 32优化 RPC 传输选项优化 26修复多并发查询临时文件文件名冲突导致读取错误与崩溃修复 18macOS 平台USE数据库语句输出提示与 Linux 统一为Database changed.修复 35。九、安全加固本版本在安全方面有 11 项改动值得重点关注RPC 层优化消息长度校验逻辑防范 DoS 攻击安全 1RPC 通信新增业务身份认证机制杜绝通信信息明文传输安全 2漏洞修复修复createRawValueNodeExt中pLeft/pRightdouble-free 漏洞GHSA-vxcq-cqrc-f8j3、createSimpleSubQStmt中错误变量导致的 UAF/double-free 漏洞GHSA-v8cj-fw82-9jjf、projectApplyFunction中pBlockListdouble-free 漏洞GHSA-f8pf-77fh-53wv安全 3-5组件升级升级 PCRE2 至 10.47修复安全漏洞 CVE-2025-58050安全 6供应链与流程将 gitleaks 密钥扫描嵌入 CI/CD 流水线作为正式质量门禁安全 7为发布版本新增 SBOM 生成脚本安全 8数据安全数据库查询落地临时文件时新增文件加密与解密处理逻辑安全 11增强 UDF 路径安全性校验安全 9会话安全密码修改后使用旧密码建立的连接将被强制断开后续请求返回认证失败安全 10同时修复了密钥更新仅在 mnode leader 节点生效的问题修复 12。十、升级建议综合来看3.4.2.2 是一个功能与稳定性并重的版本建议优先升级使用虚拟表/联邦查询、需要将 CSV 或行值数据快速参与查询、依赖外部窗口做分层聚合、或对多副本恢复速度敏感的用户可直接受益于本版本的核心特性WebSocket 接入用户C/Go/NodeJs/Python 四端 Adapter 高可用补齐建议同步升级连接器与适配器版本安全敏感环境本版本包含 3 个 double-free 漏洞修复与 PCRE2 安全升级建议尽快跟进数据集成场景taosX 改动密集Parquet/Kafka 导出、OPC UA 告警、多项备份修复使用 taosX 的用户应重点回归备份恢复与同步链路。版本详情与历史版本说明可参见 版本发布历史。【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表