• 建模基本方法

      需要创建库、创建超级表、创建子表,才能写入数据

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      --- 创建库

      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 创建库

      可以根据相同的数据特征进行创建一个库,每个库可以配置不同的存储策略;

      1
      2
      --- 创建一个power库,这个库的保存时间将保留365天
      CREATE DATABASE power KEEP 365;

      2 引入超级表

      一个数据采集点一张表,意味着1000万张智能电表对应1000万张表。为方便对相同类型的多表操作,引入超级表的概念。

      1
      2
      --- 创建超级表是,需要提供:表名、表结果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 创建表/子表

      1
      CREATE TABLE d1001 USING meters TAGS("Beijing. Chaoyang",2);
      • TDengine对每个数据采集点需要独立建表

      • 因为源于超级表(meters)创建而成,也称为子表;

      • 创建时,需要使用超级表作为模板,同时指定标签的具体值

      • 一个超级表,可以包含若干子表,子表数量没有限制

      子表详解

      • d1001 — 子表名,meters ---- 超级表名,Location的标签是Beijing.Chaoyang,groupId的标签值2

      • 创建子表时,需要指定标签值,事后也可以修改

      • 建议将数据采集点的全局唯一ID作为子表名(如设备的序列号)

      子表的自动建表

      在某些特殊场景下,用户在写数据时,并不确定某个子表是否存在。此时,可使用自动建表语法来创建不存在的表,若该表已存在则不会建立新表

      1
      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既支持多列模型,也支持单列模型

      • 同时采集同表采用多列模型:只要物理量是同一数据采集点同时采集的,这些量就可以作为不同列放在一证超级表里

      • 单列模型:每个物理量都单独建表。比如电流,电压两个量,就创建两张超级表

      • 尽可能的采用多列模型,因为插入效率以及存储效率更高