我发现 tdengine 有一个参数会创建数据库。此定义“KEEP 参数是指保存修改后的数据文件的天数。”来自 tdengine 的网站https://www.taosdata.com/en/documentation/taos-sql#management。我觉得这个参数非常有用,不需要删除历史数据。所以我创建了一个只保存 10 天的数据库。
CREATE DATABASE IF NOT EXISTS db_keep KEEP 10 PRECISION 'ms' ;
create table test_keep(ts timestamp,desc nchar(20));
创建 db 和 table 之后,我尝试将一些数据插入到表中。以下是我的插入 sql。
insert into test_keep values(now,'now');
insert into test_keep values('2021-08-31 10:28:53.521','yesterday');
insert into test_keep values('2021-09-02 10:28:53.521','tomorrow');
insert into test_keep values('2021-08-25 10:28:53.521','6 days before');
insert into test_keep values('2021-09-20 12:28:53.521','20 days later');
insert into test_keep values('2021-08-21 10:28:53.521','10 days before');
insert into test_keep values('2021-08-11 10:28:53.521','20 days before');
虽然 lass 三个 sql 执行错误“数据库错误:时间戳数据超出范围”
taos> 插入 test_keep 值(现在,'现在');查询正常,数据库中 1 行中的 1 行 (1.024000s)
taos> 插入 test_keep values('2021-08-31 10:28:53.521','yesterday'); 查询 OK,数据库中 1 行中的 1 行 (0.006000s)
taos> 插入 test_keep values('2021-09-02 10:28:53.521','tomorrow'); 查询 OK,数据库中 1 行中的 1 行 (0.004000s)
taos> 插入 test_keep values('2021-08-25 10:28:53.521','6 days before'); 查询 OK,数据库中 1 行中的 1 行 (0.004000s)
taos> 插入 test_keep 值('2021-09-20 12:28:53.521','20 天后');
DB错误:时间戳数据超出范围(0.005000s)taos>插入test_keep值('2021-08-21 10:28:53.521','10天前');
DB错误:时间戳数据超出范围(0.004000s)taos>插入test_keep值('2021-08-11 10:28:53.521','20天前');
DB错误:时间戳数据超出范围(0.004000s)taos>
我认为这是因为我的保持很小,所以我把它放大了。
ALTER DATABASE db_keep KEEP 365;
并且我尝试再次插入失败的 sql,但我发现几天后无法插入数据。
taos> 插入 test_keep 值('2021-09-20 12:28:53.521','20 天后');
DB错误:时间戳数据超出范围(0.005000s)taos>插入test_keep值('2021-08-21 10:28:53.521','10天前');查询 OK,数据库中 1 行中的 1 行 (0.004000s)
taos> 插入 test_keep values('2021-08-11 10:28:53.521','20 days before'); 查询 OK,数据库中 1 行中的 1 行 (0.004000s)
我想问一下如何使用keep以及它如何限制数据的时间戳?