摘要:本文主要介绍tdengine时序数据库的安装和简单使用,内容全部来源于官方文档,我只是做了一个快速入门摘要,让大家能够快速的入门。
- 官方文档地址:docs.taosdata.com/basic/model…
- 开源版本和商业版功能对比:www.taosdata.com/products#co…
基于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' ;