TDengine 是一款专为物联网、工业互联网等场景设计并优化的大数据平台,它能安全高效地将大量设备、数据采集器每天产生的高达 TB 甚至 PB 级的数据进行汇聚、存储、分析和分发,对业务运行状态进行实时监测、预警,提供实时的商业洞察。其核心模块是高性能、集群开源、云原生、极简的时序数据库 TDengine OSS。

下载安装:

TDengine:TDengine-client-3.2.1.0-Windows-x64.exe (17.1 M)

官网地址:建立连接 | TDengine 文档 | 涛思数据

可视化工具:

TDengineGUI.Setup.1.0.3

下载地址:https://github.com/skye0207/TDengineGUI/releases/tag/v1.0.0

DBeaver(更好用) 

Download | DBeaver Community

Maven:

<dependency>

  <groupId>com.taosdata.jdbc</groupId>

  <artifactId>taos-jdbcdriver</artifactId>

  <version>3.2.7</version>

</dependency>

建立连接:

Class.forName("com.taosdata.jdbc.TSDBDriver");

String jdbcUrl = "jdbc:TAOS://taosdemo.com:6030/test?user=root&password=taosdata";

Connection conn = DriverManager.getConnection(jdbcUrl);

url 中的配置参数如下:

user:登录 TDengine 用户名,默认值 'root'。

password:用户登录密码,默认值 'taosdata'。

cfgdir:客户端配置文件目录路径,Linux OS 上默认值 /etc/taos,Windows OS 上默认值 C:/TDengine/cfg。

启动:

Win:

安装后,可以在拥有管理员权限的 cmd 窗口执行 sc start taosd 或在 C:\TDengine 目录下,运行 taosd.exe 来启动 TDengine 服务进程。如需使用 http/REST 服务,请执行 sc start taosadapter 或运行 taosadapter.exe 来启动 taosAdapter 服务进程。

Linux:

安装后,请使用 systemctl 命令来启动 TDengine 的服务进程。

systemctl start taosd

检查服务是否正常工作:

systemctl status taosd

语法:

时序库:

  1. 创建时序库,当前库不存在则创建

create database if not exists dev;

  1. 查看库

show databases;

  1. 删除库,当前库存在则删除

drop database if exists dev;

超级表:

超级表并不是具体要操作的表,超级表的下级可以有多张子表,由超级表定义子表的抽象大纲,子表用于实现超级表所定义的类型,超级表和子表的关系可以理解为java中的多态,一种事物多张形态。

创建超级表:

create table if not exists dev.weather(ts timestamp, temperature float, humidity float) tags(location nchar(64), groupId int);

创建子表:

create table if not exists dev.t1 using dev.weather tags('杭州余杭区', 1);

create table if not exists dev.t2 using dev.weather tags('杭州西湖区', 1);

create table if not exists dev.t3 using dev.weather tags('杭州萧山区', 1);

create table if not exists dev.t4 using dev.weather tags('上海宝山区', 2);

插入数据:

如果要插入数据也不是对超级表进行操作,而是对子表进行操作

下面分别向t1,t2,t3,t4插入一条数据,sql如下

insert into dev.t1 values ('2018-01-01 00:00:00.001', 6.1,8.0);

insert into dev.t2 values ('2018-01-01 00:00:00.002', 6.5,8.9);

insert into dev.t3 values ('2018-01-01 00:00:00.003', 6.8,7.9);

insert into dev.t4 values ('2018-01-01 00:00:00.004', 7.5,10.9);

建普通表:

在dev库中创建一个名为test01的普通表,不需要制定标签类

CREATE TABLE dev.test01 (time timestamp , sensor_id INT, id FLOAT);

注意事项:

  1. 绑定标签列的表则是超级表,不绑定标签列的则是普通表
  2. 超级表和普通表同级
  3. 超级表下的子表也属于是子普通表

建表注意事项:

  1. 表的第一个字段必须是 TIMESTAMP,并且系统自动将其设为主键;
  2. 子表名只能由字母、数字和下划线组成,且不能以数字开头,不区分大小写
  3. 使用数据类型 BINARY/NCHAR/GEOMETRY,需指定其最长的字节数,如 BINARY(20),表示 20 字节;
  4. 例如:`aBc` 和 `abc` 是不同的表名,但是 abc 和 aBc 是相同的表名。
  5. 超级表和普通表是同级关系,名称不能相同,比如超级表中有一个名为test01的,那么普通表就不能创建同名;

查询语句:

普通查询

SELECT location, groupid, current FROM d1001 LIMIT 2;

聚合函数

SELECT AVG(temperature),AVG(humidity), MAX(temperature), MIN(temperature) FROM dev.weather WHERE location='杭州西湖区' or location='上海宝山区' GROUP BY groupId;

释:在这里,要查询的是位于“杭州西湖区”和“上海宝山区”两个地区的平均温度avg(temperature)、平均湿度avg(humidity)、最高温度max(temperature)、最低温度min(temperature),并将结果按所处城市id(groupId)进行聚合。

对标签列去重:

SELECT DISTINCT tag_name [, tag_name ...] FROM stb_name;

对数据列去重:

SELECT DISTINCT col_name [, col_name ...] FROM tb_name;

查询时序库表的数据结构:

DESCRIBE dev.test01; 

新增语句:

需要指定 库名.表名

INSERT INTO dev.test01 (time, sensor_id, id) VALUES ('2023-01-01 12:00:00', 1, 123.45);

删除语句:

需要指定 库名.表名

delete from dev.test01 where ts < '2021-10-01 10:40:00.100' ;

运算符无变化;

修改语句:
如果我想修改t1表中地区为“杭州西湖区”的温度为10.10。一般来说,很少用到修改操作,但其用法和mysql还是有很大的区别的

首先查询原来的温度值是多少,如果按照mysql语法写会直接报错

select * from demo.weather where location='杭州西湖区';

执行之后是查不到的,会直接报错

报错信息:DB error: invalid operation: filter on tag not supported for normal table (0.000592s)

也就是说,正常表是不支持标签值的操作,这属于是超级表的操作。

“杭州西湖区”是超级表中地区标签的值,而t1就是为这个地区建的。所以直接在超级表上查询即可。

Sql如下:

select * from dev.weather where location='杭州西湖区';

默认是不支持修改数据的

如果需要修改数据,则需要打开update参数开关

建库时不指定update参数,则update参数默认为0,表示数据不可修改。

以下操作为删除原来的库,重新创建并指定update参数为1

drop database if exists demo;

create database if not exists demo update 1;

create table if not exists demo.weather(ts timestamp, temperature float, humidity float) tags(location nchar(64), groupId int);

create table if not exists demo.t1 using demo.weather tags('杭州余杭区', 1);

create table if not exists demo.t2 using demo.weather tags('杭州西湖区', 1);

create table if not exists demo.t3 using demo.weather tags('杭州萧山区', 1);

create table if not exists demo.t4 using demo.weather tags('上海宝山区', 2);

insert into demo.t1 values ('2018-01-01 00:00:00.001', 6.1,8.0);

insert into demo.t2 values ('2018-01-01 00:00:00.002', 6.5,8.9);

insert into demo.t3 values ('2018-01-01 00:00:00.003', 6.8,7.9);

insert into demo.t4 values ('2018-01-01 00:00:00.004', 7.5,10.9);

接下来修改数据

insert into demo.t2 values ('2018-01-01 00:00:00.002', 10.10,8.9);

这时发现原来的数据被新数据覆盖了,这是因为同一个子表下,如果时间戳一致,则新数据直接覆盖旧数据

注意事项:

  1. 时间戳是不可修改的
  2. Tdengine的修改并不是update而是使用insert新数据覆盖旧数据
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐