如何在tdengine中插入超出keep限制的时间戳



我发现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)

由于我的声誉不足以在这里插入图像,请参考下面的参考链接了解详细信息(灰色意味着不能插入) .

参考:

  1. https://segmentfault.com/a/1190000040617572

对于数据库中的时间戳,以下两个配置选项是最合理的:

  1. keep:在数据库中保留的最长天数参照当前时间戳(默认3650天)。当"最新的";如果持久化文件的时间戳超出范围,则持久化文件将被删除。时间戳早于now - keep将被视为Timestamp out of range
  2. days:文件保存的时间范围,默认为10天。新的时间戳不会大于now+ days

因此,数据库中可接受的时间戳范围将是[now - keep, now + days]

相关内容

  • 没有找到相关文章

最新更新