如何删除 QuestDB 中超过 90 天的记录
How do I delete records older than 90 days in QuestDB
我正在将来自多个来源的物联网传感器数据流存储到 QuestDb 中的几个 table 中,由于数据量巨大,我只想保留最近 90 天的数据。我可以在他们的文档中看到一些删除方法,但我不想 truncate
table 因为我会丢失最新记录。有什么方法可以代替备份和截断 tables 来删除超过 90 天的数据吗?
这里的策略应该是创建一个 table 分区,然后根据相对于现在的时间值删除分区。 table 还必须有一个指定的时间戳。这个例子将执行:
CREATE TABLE my_table (timestamp TIMESTAMP, x STRING) timestamp(timestamp) PARTITION BY DAY;
在您的情况下,您想要删除超过 90 天的分区,您可以使用 ALTER TABLE DROP PARTITION
ALTER TABLE my_table DROP PARTITION
WHERE timestamp < dateadd('d', -90, now())
了解您还可以按 MONTH
或 YEAR
进行分区可能会有用。
当心 这是破坏性的,QuestDB 无法恢复以这种方式删除的数据,要么确保你有适当的备份方法,要么你确定你不再需要数据。
ALTER TABLE DROP PARTITION 参考页上有更多详细信息。
编辑:
现在在 Data retention 页面
上有专门的文档
我正在将来自多个来源的物联网传感器数据流存储到 QuestDb 中的几个 table 中,由于数据量巨大,我只想保留最近 90 天的数据。我可以在他们的文档中看到一些删除方法,但我不想 truncate
table 因为我会丢失最新记录。有什么方法可以代替备份和截断 tables 来删除超过 90 天的数据吗?
这里的策略应该是创建一个 table 分区,然后根据相对于现在的时间值删除分区。 table 还必须有一个指定的时间戳。这个例子将执行:
CREATE TABLE my_table (timestamp TIMESTAMP, x STRING) timestamp(timestamp) PARTITION BY DAY;
在您的情况下,您想要删除超过 90 天的分区,您可以使用 ALTER TABLE DROP PARTITION
ALTER TABLE my_table DROP PARTITION
WHERE timestamp < dateadd('d', -90, now())
了解您还可以按 MONTH
或 YEAR
进行分区可能会有用。
当心 这是破坏性的,QuestDB 无法恢复以这种方式删除的数据,要么确保你有适当的备份方法,要么你确定你不再需要数据。 ALTER TABLE DROP PARTITION 参考页上有更多详细信息。
编辑: 现在在 Data retention 页面
上有专门的文档