TDengine 数据写入、更新与删除
本章以智能电表的数据模型为例介绍如何在 TDengine 中使用 SQL 来写入、更新、删除时序数据。
写入
在 TDengine 中,用户可以使用 SQL 的 insert 语句写入时序数据。
一次写入一条
假设设备 ID 为 d1001 的智能电表在 2018 年 10 月 3 日 14:38:05 采集到数据:电流10.3A,电压 219V,相位 0.31。在第 3 章中,我们已经在 TDengine 的 power 数据库中创建了属于超级表 meters 的子表 d1001。接下来可以通过下面的 insert 语句在子表 d1001 中写入时序数据。
- 可以通过下面的 INSERT 语句向子表d1001中写入时序数据。
insert into d1001 (ts, current, voltage, phase) values ( "2018-10-03 14:38:05", 10.3, 219, 0.31)
上面的 SQL 向子表 d1001
的 ts
, current
, voltage
, phase
这 4 列分别写入 2018-10-03 14:38:05
, 10.3
, 219
, 0.31
。
- 当
INSERT
语句中的VALUES
部分包含了表的所有列时,可以省略VALUES
前的字段列表,如下面的 SQL 语句所示,其与前面指定列的 INSERT 语句,效果完全一样。
insert into d1001 values("2018-10-03 14:38:05", 10.3, 219, 0.31)
- 对于表的时间戳列(第一列),也可以直接使用数据库精度的时间戳。
INSERT INTO d1001 VALUES (1538548685000, 10.3, 219, 0.31);
以上三种 SQL 的效果完全相同。
一次写入多条
假设设备 ID 为 d1001 的智能电表每 10s 采集一次数据,每 30s 上报一次数据,即每 30s 需要写入 3 条数据。用户可以在一条 insert 语句中写入多条记录。如下 SQL 一共写入了 3 条数据。
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)
上面的 SQL 一共写入了三条数据。
一次写入多表
假设设备 ID 为 d1001、d1002、d1003 的 3 台智能电表,都是每 30 秒需要写入 3 条数据。对于这种情况,TDengine 支持一次向多个表写入多条数据。
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)
;
上面的 SQL 一共写入了九条数据。