时序数据库 TDengine 的安装和入门使用

610 阅读4分钟

摘要:本文主要介绍tdengine时序数据库的安装和简单使用,内容全部来源于官方文档,我只是做了一个快速入门摘要,让大家能够快速的入门。

基于docker的单节点安装

docker-compose.yml

version: '3'
services:
  nexus:
    image: tdengine/tdengine:3.3.3.0
    container_name: tdengine
    networks:
      - default
    ports:
      - "6030:6030"
      - "6041:6041"
      - "6043:6043"
      - "6044-6049:6044-6049"
      - "6044-6045:6044-6045/udp"
      - "6060:6060"
    volumes:
      - ./taos:/var/lib/taos
      - ./log:/var/log/taos
networks:
  default:
    external:
      name: nisec

启动

docker compose up -d

数据库操作指南

创建数据库

CREATE DATABASE power PRECISION 'ms' KEEP 3650 DURATION 10 BUFFER 16;

该 SQL 将创建一个名为 power 的数据库,各参数说明如下:

  • PRECISION 'ms' :这个数据库的时序数据使用毫秒(ms)精度的时间戳
  • KEEP 3650:这个库的数据将保留 3650 天,超过 3650 天的数据将被自动删除
  • DURATION 10 :每 10 天的数据放在一个数据文件中
  • BUFFER 16 :写入使用大小为 16MB 的内存池。

创建超级表

CREATE STABLE meters (
    ts timestamp, 
    current float, 
    voltage int, 
    phase float
) TAGS (
    location varchar(64), 
    group_id int
);

在 TDengine 中,创建超级表的 SQL 语句与关系型数据库类似。例如,上面的 SQL 中,CREATE STABLE 为关键字,表示创建超级表;接着,meters 是超级表的名称;在表名后面的括号中,定义超级表的列(列名、数据类型等),规则如下:

  • 第 1 列必须为时间戳列。例如:ts timestamp 表示,时间戳列名是 ts,数据类型为 timestamp;
  • 从第 2 列开始是采集量列。采集量的数据类型可以为整型、浮点型、字符串等。例如:current float 表示,采集量电流 current,数据类型为 float;

最后,TAGS是关键字,表示标签,在 TAGS 后面的括号中,定义超级表的标签(标签名、数据类型等)。

  • 标签的数据类型可以为整型、浮点型、字符串等。例如:location varchar(64) 表示,标签地区 location,数据类型为 varchar(64);
  • 标签的名称不能与采集量列的名称相同。

创建表

CREATE TABLE d1001 
USING meters (
    location,
    group_id
) TAGS (
    "California.SanFrancisco", 
    1
);

上面的 SQL 中,CREATE TABLE 为关键字,表示创建表;d1001 是子表的名称;USING 是关键字,表示要使用超级表作为模版;meters 是超级表的名称;在超级表名后的括号中,location, group_id 表示,是超级表的标签列名列表;TAGS 是关键字,在后面的括号中指定子表的标签列的值。"California.SanFrancisco" 和 2 表示子表 d1001 的位置为 California.SanFrancisco,分组 ID 为 2

数据写入

单条写入

insert into d1001 (ts, current, voltage, phase) values ( "2018-10-03 14:38:05", 10.3, 219, 0.31)

一次写入多条

insert into d1001 values
 ( "2018-10-03 14:38:05", 10.2, 220, 0.23),
 ( "2018-10-03 14:38:15", 12.6, 218, 0.33),
 ( "2018-10-03 14:38:25", 12.3, 221, 0.31)

一次写入多表

INSERT INTO d1001 VALUES 
    ("2018-10-03 14:38:05", 10.2, 220, 0.23),
    ("2018-10-03 14:38:15", 12.6, 218, 0.33),
    ("2018-10-03 14:38:25", 12.3, 221, 0.31) 
d1002 VALUES 
    ("2018-10-03 14:38:04", 10.2, 220, 0.23),
    ("2018-10-03 14:38:14", 10.3, 218, 0.25),
    ("2018-10-03 14:38:24", 10.1, 220, 0.22)
d1003 VALUES
    ("2018-10-03 14:38:06", 11.5, 221, 0.35),
    ("2018-10-03 14:38:16", 10.4, 220, 0.36),
    ("2018-10-03 14:38:26", 10.3, 220, 0.33)
;

指定列写入

insert into d1004 (ts, voltage, phase) values("2018-10-04 14:38:06", 223, 0.29)

写入时自动建表

insert into d1005
using meters (location)
tags ( "beijing.chaoyang")
values ( "2018-10-04 14:38:07", 10.15, 217, 0.33)

通过超级表写入

TDengine 还支持直接向超级表写入数据。需要注意的是,超级表是一个模板,本身不存储数据,写入的数据是存储在对应的子表中。如下 SQL 通过指定 tbname 列向子表d1001 写入一条数据。表不存在的时候会自动建表,推荐使用这种模式操作。

insert into meters (tbname, ts, current, voltage, phase, location, group_id)
values( "d1001", "2018-10-03 14:38:05", 10.2, 220, 0.23, "California.SanFrancisco", 2)

更新

推荐直接使用超表

INSERT INTO d1001 (ts, current) VALUES ("2018-10-03 14:38:05", 22);

删除

推荐直接使用超表

delete from meters where ts < '2021-10-01 10:40:00.100' ;