建模基本方法
需要创建库、创建超级表、创建子表,才能写入数据
--- 创建库
CRETAE DATABASE dbname;
--- 使用库
USE dbname;
--- 创建表
CREATE TABLE stbname(ts timestamp,other fields...) tags(tag fields);
ts --- 必须要创建的主键
tag --- 标签
--- 创建子表
CREATE TABLE tbname using stbname tags(具体的标签值)
--- 插入数据
INSERT INTO tbname VALUES(now, values...);
总结流程:
1、创建库 2、创建超级表,3、创建子表,4、插入数据
1 创建库
可以根据相同的数据特征进行创建一个库,每个库可以配置不同的存储策略;
--- 创建一个power库,这个库的保存时间将保留365天
CREATE DATABASE power KEEP 365;
2 引入超级表
一个数据采集点一张表,意味着1000万张智能电表对应1000万张表。为方便对相同类型的多表操作,引入超级表的概念。
--- 创建超级表是,需要提供:表名、表结果schema、标签schema;
CREATE TABLE meters(ts timestamp,current float,voltage int) TAGS(location binary(64),groupId int);
超级表的列分两部分:动态部分,静态部分
动态部分是采集数据,第一列为时间戳(ts),其他列为采集的物理量(current,voltage)
静态部分指采集点的静态属性,一般作为标签。如采集点的地理位置,设备型号,设备组,管理员ID等。
标签可以在事后增加、删除、修改
- 同时采集同表:一张超级表里,包含的采集物理量必须是同时采集的,也就是说时间戳都是相同的
- 对一个类型的设备,可能存在多组物理量,每组物理量并不是同时采集的,则需要为每组物理量单独建一个超级表。因此一个类型的设备,可能需要建立多个超级表。
- 系统有N个不同类型的设备,就需要建立至少N个超级表
- 一个系统可以有多个DB库,一个DB库里可以有一到多个超级表
3 创建表/子表
CREATE TABLE d1001 USING meters TAGS("Beijing. Chaoyang",2);
-
TDengine对每个数据采集点需要独立建表
-
因为源于超级表(meters)创建而成,也称为子表;
-
创建时,需要使用超级表作为模板,同时指定标签的具体值
-
一个超级表,可以包含若干子表,子表数量没有限制
子表详解
-
d1001 — 子表名,meters ---- 超级表名,Location的标签是Beijing.Chaoyang,groupId的标签值2
-
创建子表时,需要指定标签值,事后也可以修改
-
建议将数据采集点的全局唯一ID作为子表名(如设备的序列号)
子表的自动建表
在某些特殊场景下,用户在写数据时,并不确定某个子表是否存在。此时,可使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表
INSERT INTO d1001 USING meters TAGS('Beijing.Chaoyang',2) VALUES(now,10.2,210);
-
上述SQL语句将记录(now,10.2,210)插入表d1001中
-
如果表d1001还未创建,则使用超级表meters做模板自动创建,同时打上标签值“Beijing. Chaoyang”,2
多列模型&单列模型
-
TDengine既支持多列模型,也支持单列模型
-
同时采集同表采用多列模型:只要物理量是同一数据采集点同时采集的,这些量就可以作为不同列放在一证超级表里
-
单列模型:每个物理量都单独建表。比如电流,电压两个量,就创建两张超级表
-
尽可能的采用多列模型,因为插入效率以及存储效率更高