我发现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和表后,我试图插入一些数据到表中。下面是我的insert 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');
当第三类sql出现execute error "DB error: Timestamp data out of range">
taos>Insert into test_keep values(now,'now');查询OK, 1行中的1行In database (1.024000s)
taos>Insert into test_keep values('2021-08-31 . '10:28:53.521"、"昨天");查询数据库中1行中的1行(0.006000)
taos>Insert into test_keep values('2021-09-02 . '10:28:53.521"、"明天");查询数据库中1行中的1行(0.004000)
taos>Insert into test_keep values('2021-08-25 10:28:53.521','6 days . '之前的);查询OK, database (0.004000s)中的1行
taos>Insert into test_keep values('2021-09-20 12:28:53.521','20 days . '后来');
数据库错误:Timestamp data out of range (0.005000s) taos>插入Test_keep values(' 2019-08-21 10:28:53.521','10 days before');
数据库错误:Timestamp data out of range (0.004000s) taos>插入Test_keep values('2021-08-11 10:28:53.521','20 days before');
数据库错误:Timestamp data out of range (0.004000s) taos>
我想这是因为我的keep太小了,所以我把它做大了。
ALTER DATABASE db_keep KEEP 365;
,当我尝试插入失败的sql时,我发现几天后不能插入数据。
taos>Insert into test_keep values('2021-09-20 12:28:53.521','20 days . '后来');
数据库错误:Timestamp data out of range (0.005000s) taos>插入Test_keep values('2021-08-21 10:28:53.521','10 days before');查询OK,数据库中1行(0.004000s)中的1行
taos>Insert into test_keep values('2021-08-11 10:28:53.521','20 days . '之前的);查询OK, database (0.004000s)中的1行
我想问如何使用keep和它如何限制数据的时间戳?
对于过去的数据,时间戳值不能超过(current_time - keep)
。同时,对于以后的数据,时间戳值不能超过(current time + days)
。
由于我的声誉不足以在这里插入图像,请参考下面的参考链接了解详细信息(灰色意味着不能插入) .
参考:
- https://segmentfault.com/a/1190000040617572
对于数据库中的时间戳,以下两个配置选项是最合理的:
keep
:在数据库中保留的最长天数参照当前时间戳(默认3650天)。当"最新的";如果持久化文件的时间戳超出范围,则持久化文件将被删除。时间戳早于now - keep
将被视为Timestamp out of range
。days
:文件保存的时间范围,默认为10天。新的时间戳不会大于now+ days
。
因此,数据库中可接受的时间戳范围将是[now - keep, now + days]
。