虚拟表

虚拟表

在工业和物联网等真实应用场景中,数据采集的复杂性远远超出单表所能覆盖的范畴。尽管 TDengine 通过“一个数据采集点一张表”和“超级表”机制,已成功解决了大规模时序数据的高效管理问题,但设备内部的多传感器、多频率特性,仍对建模和查询提出了更高要求。

设备数据建模的真实挑战

在实际应用中,一个设备通常由多个传感器组成,采集的参数种类繁多,且采样频率各不相同。例如,一台风机可能同时采集电气参数、环境参数和机械参数,不同类型的传感器采集频次差异明显,难以通过一张表完整建模,通常需要拆分为多张表分别管理。而在进行多传感器数据的联合分析时,往往依赖多级关联查询,不仅使用复杂,也会影响性能表现。

从使用体验来看,“一个设备一张表”的建模方式更为直观,也更便于业务理解与开发操作。但如果在建模初期直接采用这种方式,将所有传感器数据汇总进一张大表,由于采样频率不一致,绝大多数时间点会存在大量空值,既浪费存储空间,也显著降低查询效率。

虚拟表:解耦物理存储,统一视图建模

为解决这一问题,TDengine 引入“虚拟表”(Virtual Table,简称 VTable)机制。虚拟表是一种不实际存储数据、但可用于查询与分析的逻辑表,其数据来自其他真实存储数据的子表或普通表。通过将原始表中选定列的数据按时间戳进行排序、对齐和合并,虚拟表可动态生成统一的数据视图,用于复杂场景下的关联分析。

虚拟表支持与真实表一致的查询方式,但不支持写入或删除操作。虚拟表的数据在每次查询计算时都是动态生成的,只有被引用的列才会被合并进表中,因此同一个虚拟表在不同查询中所呈现以及扫描的数据可能完全不同。

同真实表类似,虚拟表也可以分为虚拟超级表、虚拟子表、虚拟普通表:

  • 虚拟超级表:可代表一个设备或一组分析所需数据的完整集合,统一管理来自多个采集点的数据;
  • 虚拟子表 / 普通表:用户可根据需求选择原始表中的任意列,自由拼接,按需定义,形成个性化视图。

其主要功能特点包括:

  • 列选择与拼接:支持从多个原始表中灵活选取列组合,构建统一数据视图;
  • 基于时间戳对齐:以时间戳为基准对各列数据对齐,如果多个表在相同时间戳下存在数据,则对应列的值组合成同一行,无数据时填充 NULL;
  • 动态更新、实时响应:原始数据变更后,虚拟表自动反映,无需手动刷新或同步;虚拟表不需实际存储,计算在生成时动态完成。

让“一个设备一张表”真正落地

借助虚拟表机制,TDengine 成功打通了底层数据建模与上层分析之间的鸿沟,实现了对更大规模、更复杂设备数据的统一管理。用户无需改变现有的采集点建模方式,无论是单列还是多列、单库还是多库,都可以通过定义虚拟表灵活引用多个数据源,并借助虚拟超级表完成跨采集点、跨维度的聚合分析,“一个设备一张表”的建模理念也因此真正落地。