3-TDengine竟然无法修改、删除数据?
背景没错! TDengine 在 SQL 层面并没有提供修改与删除操作的语句,即不存在 UPDATE , DELETE 语句。TDengine默认配置下数据不可更新!TDengine默认配置下数据存储10年!我们前面在体验 TDengine 基本功能时,仅涉及到数据库的创建、删除、数据表的创建、删除以及数据表的各类查询功能,那么我们通常说的数据表 CRUD (Create, Retrieve, U
【本文正在参与 “拥抱开源 | 涛思数据 TDengine有奖征稿】
https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c
背景
没错! TDengine
在 SQL
层面并没有提供修改与删除操作的语句,即不存在 UPDATE
, DELETE
语句。
-
TDengine
默认配置下数据不可更新! -
TDengine
默认配置下数据存储10年!
我们前面在体验 TDengine
基本功能时,仅涉及到数据库的创建、删除、数据表的创建、删除以及数据表的各类查询功能,那么我们通常说的数据表 CRUD
(Create, Retrieve, Update, Delete),这里仅涉及到了创建与查询,那么更新和删除呢?我们从两个方面看待这个问题。
-
TDengine
是针对物联网时序数据专门设计的,且以时间戳为主键;物联网数据具有一次写入、多次读取;单个数据点的价值很低,用户关注的是一段时间内的趋势的特点。修改或者删除单个数据点意义不大,或者就是居心不良。。 -
另一方面,就要研究下
TDengine
的建库语句了。或者足够细心的话,我们从show databases;
语句的结果中也可以看出一些与修改(update)、删除(keep0, keep1, keep(D))相关的配置项的。也就是说,TDengine
是支持修改与删除的,只是需要进行配置。
建库语句
CREATE DATABASE [IF NOT EXISTS] db_name [KEEP keep] [DAYS days] [UPDATE 1];
Notes:
- KEEP是该数据库的数据保留多长天数,缺省是3650天(10年),数据库会自动删除超过时限的数据;
- UPDATE 标志数据库支持更新相同时间戳数据;
不可修改?
建库时不指定 update
参数,则 update
默认为0,表示数据不可修改(相同时间戳的数据直接被丢弃)。
可通过 update
参数配置为可修改,但是在修改时,要求时间戳必须一样,其他字段才能修改成功(显然,时间戳无法修改~)。
taos> drop database if exists open_update;
Query OK, 0 of 0 row(s) in database (0.018665s)
taos> create database open_update update 1;
Query OK, 0 of 0 row(s) in database (0.003878s)
taos> create table if not exists open_update.weather(ts timestamp, temperature float, humidity float) tags(location nchar(64), groupId int);
Query OK, 0 of 0 row(s) in database (0.001556s)
taos> create table if not exists open_update.t1 using open_update.weather tags("taiyuan", 1);
Query OK, 0 of 0 row(s) in database (0.064076s)
taos> create table if not exists open_update.t2 using open_update.weather tags("xian", 1);
Query OK, 0 of 0 row(s) in database (0.003091s)
taos> insert into open_update.t2 (ts, temperature, humidity) values ("2021-07-26 13:55:09.237", 99.9, 999);
Query OK, 1 of 1 row(s) in database (0.004368s)
taos> select * from open_update.t2;
ts | temperature | humidity |
========================================================================
2021-07-26 13:55:09.237 | 99.90000 | 999.00000 |
Query OK, 1 row(s) in set (0.004518s)
taos> insert into open_update.t2 (ts, temperature, humidity) values ("2021-07-26 13:55:09.237", 1.0, 111);
Query OK, 1 of 1 row(s) in database (0.001265s)
taos> select * from open_update.t2;
ts | temperature | humidity |
========================================================================
2021-07-26 13:55:09.237 | 1.00000 | 111.00000 |
Query OK, 1 row(s) in set (0.004360s)
这时,可通过 show databases;
查看对应 open_update
数据库的 update
配置为1,表示数据可按照时间戳覆写。
- 附SQL:
drop database if exists open_update;
create database open_update update 1;
create table if not exists open_update.weather(ts timestamp, temperature float, humidity float) tags(location nchar(64), groupId int);
create table if not exists open_update.t1 using open_update.weather tags("taiyuan", 1);
create table if not exists open_update.t2 using open_update.weather tags("xian", 1);
insert into open_update.t2 (ts, temperature, humidity) values ("2021-07-26 13:55:09.237", 99.9, 999);
select * from open_update.t2;
insert into open_update.t2 (ts, temperature, humidity) values ("2021-07-26 13:55:09.237", 1.0, 111);
select * from open_update.t2;
不可删除?
建库时不指定 keep
参数,则 keep
默认为3650,表示数据存储10年,即 TDengine
具有数据自动清理机制。
Note:
- keep与days关联使用,两者之间有限制(keep不可小于days),KEEP 参数是指修改数据文件保存的天数,缺省值为 3650,取值范围 [days, 365000],必须大于或等于 days 参数值,days默认值为10;
- 可通过配置文件(vi /etc/taos/taos.cfg)及建库选项的keep, days参数进行配置。
taos> create database auto_delete keep 1 days 1;
Query OK, 0 of 0 row(s) in database (0.001604s)
# 显示的内容后面以...结尾时,表示该内容已被截断
taos> show create database auto_delete;
Database | Create Database |
==================================================================
auto_delete | CREATE DATABASE auto_delete... |
Query OK, 1 row(s) in set (0.002352s)
# 显示的内容后面以...结尾时,表示该内容已被截断
taos> show create table auto_delete.weather;
Table | Create Table |
==================================================================
weather | create table weather (ts TI... |
Query OK, 1 row(s) in set (0.001046s)
# 通过此命令修改显示字符宽度以显示完整的内容。注意:这个设置命令是临时的,当重启taosd服务后,该配置失效。
taos> SET MAX_BINARY_DISPLAY_WIDTH 125;
taos> show create database auto_delete;
Database | Create Database |
====================================================================================================
auto_delete | CREATE DATABASE auto_delete REPLICA 1 QUORUM 1 DAYS 1 BLOCKS 6 |
Query OK, 1 row(s) in set (0.001756s)
taos> show create table auto_delete.weather;
Table | Create Table |
=============================================================================================================================================
weather | create table weather (ts TIMESTAMP,temperature FLOAT,humidity FLOAT) TAGS (location NCHAR(64),groupid INT) |
Query OK, 1 row(s) in set (0.000232s)
- 附SQL:
create database auto_delete keep 1 days 1;
create table if not exists auto_delete.weather(ts timestamp, temperature float, humidity float) tags(location nchar(64), groupId int);
create table if not exists auto_delete.t1 using auto_delete.weather tags("taiyuan", 1);
create table if not exists auto_delete.t2 using auto_delete.weather tags("yuncheng", 1);
create table if not exists auto_delete.t3 using auto_delete.weather tags("xian", 2);
create table if not exists auto_delete.t4 using auto_delete.weather tags("xianyang", 2);
insert into auto_delete.t1 (ts, temperature, humidity) values (now, 23.0, 50.1);
insert into auto_delete.t2 (ts, temperature, humidity) values (now, 23.0, 50.1);
insert into auto_delete.t3 (ts, temperature, humidity) values (now, 23.0, 50.1);
insert into auto_delete.t4 (ts, temperature, humidity) values (now, 23.0, 50.1);
Notes:
-
我遇到了数据到了时间却未被清除的问题,不过晚上关闭了虚拟机,第二天数据确实被清除了。具体原理参考官网:https://blog.csdn.net/taos_data/article/details/117999718?spm=1001.2014.3001.5501
-
测试配置可更新时,刚开始的库名为:
can_update
,建好库后,执行show create database can_update
报错,后来换了数据库名为open_update
才正常执行,难道can_update
是关键词,在官方文档里并没有找见,这可能是个bug…
drop database if exists can_update;
create database can_update update 1;
show create database can_update;
Reference
If you have any questions or any bugs are found, please feel free to contact me.
Your comments and suggestions are welcome!
【本文正在参与 “拥抱开源 | 涛思数据 TDengine有奖征稿】
https://marketing.csdn.net/p/0ada836ca30caa924b9baae0fd33857c
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)