超级表的列分两部分:动态部分,静态部分 。
动态部分是采集的数据,第一列为时间戳(ts) , 其他列为采集的物理量(current, voltage) 。
静态部分指采集点的静态属性 , 一般作为标签 。如采集点的地理位置、设备型号、设备组、管理员ID等 。
标签可以事后增加、删除、修改 。
TDengine支持以下数据类型 。

文章插图
深入理解超级表
同时采集同表:一张超级表里,包含的采集物理量必须是同时采集的,也就是说时间戳都是相同的 。
对一个类型的设备,可能存在多组物理量 , 每组物理量并不是同时采集的 , 则需要为每组物理量单独建一个超级表 。因此一个类型的设备,可能需要建立多个超级表 。
系统有N个不同类型的设备 , 就需要建立至少N个超级表 。
一个系统可以有多个DB库 , 一个DB库里可以有一到多个超级表 。
创建表/子表
TDengine对每个数据采集点需要独立建表;因为源于超级表(meters)创建而成,也称子表(d1001);创建时,需要使用超级表做模板,同时指定标签的具体值;一个超级表,可包含若干子表,子表数量没有限制 。
CREATE TABLE d1001 USING meters TAGS ("Beijing.Chaoyang", 2);d1001是子表名,meters是超级表名,紧跟Location的标签值”Beijing.Chaoyang",groupId的标签值2 。在创建表/子表时,需指定标签值,事后也可修改;建议将数据采集点的全局唯一ID作为子表名(如设备序列号) 。
子表自动建表
在某些特殊场景中,用户在写数据时 , 并不确定某个子表是否存在 。此时,可使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表
INSERT INTO d1001 USING meters TAGS ("Beijng.Chaoyang", 2) VALUES (now, 10.2, 219);上述SQL语句将记录(now, 10.2, 219) 插入进表d1001,如果表d1001还未创建,则使用超级表meters做模板自动创建,同时打上标签值“Beijing.Chaoyang", 2 。
多列模型 vs 单列模型
TDengine既支持多列模型,也支持单列模型 。
?多列模型?:只要物理量是同一数据采集点同时采集的,这些量就可以作为不同列放在一张超级表里 。
?单列模型?:每个物理量都单独建表 。比如电流、电压两个量,就建两张超级表 。
我们建议:尽可能采用多列模型,因为插入效率以及存储效率更高;对于有些场景,一个采集点的物理量的种类经常变化 , 这时可采用单列模型 。
?新能源汽车示例
场景及建模分析
- 某车企拟对其生产、销售的新能源汽车进行追踪分析;
- 每辆车配置了远程采集终端,采集车辆状态信息:位置(经纬度)、车速、电池温度、电池电流、环境温度、轮胎胎压;
- 后台统计分析需要按:车型、销售区域、销售员、电池包容量、电机功率进行分类聚合;
- 6个采集量中前4个为同时采集,将其放入一张超级表 – vehicle_main, 其余2个测点,温度与胎压采集的频率完全不一样,分别创建2个超级表 – vehicle_temp, vehicle_tire;
- 每辆车有唯一编码VIN,采用该编码与超级表的表名前缀作为唯一表名 。
CREATE DATABASE nev KEEP 3650;USE nev;CREATE TABLE vehicle_main (ts timestamp, longitude double, latitude double, vspeed int, btemp int, bcurrent int) TAGS (vin binary(30), model binary(20), szone binary(30), sales int, bcapacity float, mpower float);CREATE TABLE vmTS8392EGV062192009 USING vehicle_main TAGS ("TS8392EGV062192009", "GTS7180", "Beijing.haidian", "10060089", 86.0, 125.5);CREATE TABLE vehicle_temp (ts timestamp, vtemp int) TAGS (vin binary(30));CREATE TABLE vtpTS8392EGV062192009 USING vehicle_vtemp TAGS ("TS8392EGV062192009");CREATE TABLE vehicle_tire (ts timestamp, vpressure int) TAGS (vin binary(30));CREATE TABLE vtrTS8392EGV062192009 USING vehicle_vtire TAGS ("TS8392EGV062192009");//查询指定车辆最近10天的运行轨迹SELECT ts, longtitude, latitude FROM vtrTS8392EGV062192009 where ts >now -10d//按车型查询平均车速、平均动力电池温度、平均放电电流SELECT AVG(vspeed), AVG(btemp), AVG(bcurrent) FROM vehicle_main GROUP BY model 【TDengine的数据建模?库、表、超级表是什么?怎么用?】
推荐阅读
- 利用Pandas处理数据 缺失值的处理 数据库的使用 python-数据描述与分析2
- 基于Netty的TCP服务框架
- Docker | 镜像浅析,以及制作自己的镜像
- 大雁的雁拼音是 大雁的拼音是什么
- 华为nova8和nova8pro的区别_华为nova8和nova8pro哪个值得买
- 亲爱的汉修先生主要内容 亲爱的汉修先生电子书
- 大朗房屋出租|如何查找需要租房子的人呢
- 狼人杀怎样才能玩的好(狼人杀怎么玩难度高)
- 狼人杀现场怎么玩(十大最恐怖的狼人杀)
- 狼人杀全面教程(狼人杀的教程)