创建库
建议为特征相同的表创建一个库,每个库可以配置不同的存储策略。
CREATE DATABASE POWER KEEP 365;
数据保存365天。
USE power;
超级表
一个数据采集点一张表,意味1000w智能电表对应1000w张表,
CREATE TABLE meters(ts timestamp,current float,voltage int) TAGS(location binary(64),grounpdId int)
超级表详解,超级表的列分为两部分:动态部分,静态部分
动态部分是采集数据,第一列为时间戳,其他列为采集的物理量
静态部分是指采集点的静态属性,一般作为标签.如采集点的地理位置、设备型号、设备组、管理员ID等。
标签可以时候、增加、删除、修改。
同时采集同表:一张超级表里,包含的采集物理量必须同时采集的,也就是说时间戳是相同的。
对一个类型的设备,可能存在多组物理量,每组物理量并不是同时采集的,则需要为每组物理量单独建一个超级表.因此一个类型的设备,
可能需要建立多个超级表
系统有N个不同类型的设备,就需要建立至少N个超级表。
一个系统可以有多个DB库,一个DB库里可以有一到多个超级表。
创建表/子表
CREATE TABLE DD USING meters TAGS("CQ.YB",4);
insert into DD(ts,current,voltage) values(NOW,1,1);
insert into DD(ts,current,voltage) values(NOW,2,2
);
TDengine对每个数据采集点需要独立建表
因为源于超级表(meters)创建而成,也称子表(d1001)
创建时,需要使用超级表做模板,同时指定标签的具体值
一个超级表,可包含若干子表,子表数量没有限制。
d1001是子表名,meters是超级表名,紧跟Location的标签值为"CQ.YB" grounpdId的标签值为2
在创建子表时,需指定标签值,事后也可以修改
建议将数据采集点的全局唯一ID作为子表名,如设备序列号。
子表自动建表。
INSERT INTO TT USING meters TAGS("CQ.SPB", 3) values(now,10,219);
如果表TT还未创建,则使用超级表meters做模板自动创建,同时打上标签值==="CQ.SPB", 3
多列模型VS单列模型
同时采集同表采用多列模型:只要物理量是同一数据采集点同时采集的,这些量就可以作为不同列放在一张超级表里
单列模型:每个物理量都单独建表。比如电流、电压两个量,就建两张超级表。
TDengine建议
尽可能才采用多列模型,因为插入效率和存储效率更高
对于有些场景,一个采集点的物理量的种类经常变化,可采用单列模型
CREATE TABLE VECH(ts timestamp,vtemp int) TAGS(vin binary(30));
CREATE TABLE vtpTS839 USING VECH TAGS("TS839") ;
CREATE TABLE VECH_TIRE(ts timestamp,vpressure int) TAGS(vin binary(30));
CREATE TABLE vtrTS839 USING VECH_TIRE TAGS('TS839') ;
查看所有数据库
show databases;
使用/切换数据库
use 数据库名;
创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [KEEP keep]
删除数据库
DROP DATABASE [IF EXISTS] db_name
查询所有表
show stables; 或者 show tables;
查看表结构
describe TT;
超表:
1. 新增列
alter stable 超表名 add column ID NCHAR(64);
2. 删除列
alter stable 超表名 drop column 字段名;
查询超表下有的子表
select tbname from 超表名 [ where tbname in ('子表名') ]