我正在尝试将clickhouse群集从版本18.8升级到19.9.2。以前,我有一个cronjob从数据库中删除旧数据。我想改用ttl特性。
简化的表定义:
CREATE TABLE myTimeseries(
timestamp_ns Int64,
source_id String,
data String,
date Date MATERIALIZED toDate(timestamp_ns/1e9),
time DateTime MATERIALIZED toDateTime(timestamp_ns/1e9))
ENGINE = MergeTree()
PARTITION BY (source_id, toStartOfHour(time))
TTL date + toInterValDay(7)
SETTINGS index_granularity=8192, merge_with_ttl_timeout=43200
问题是,它不会删除旧数据。我在文档中找不到任何有助于调试此问题的内容。
问题:
如何调试此问题(有没有办法知道将来什么时候数据会被清除?
这可能是因为日期字段被具体化了吗?我有另一个表,其中日期不是一个具体的领域和一切工作正常。
1条答案
按热度按时间r55awzrz1#
是的,您可以使用具有ttl特性的物化字段。我附加了一个简单的查询,可以创建一个表,每隔5分钟删除一次。它在clickhouse服务器版本20.4.5上运行良好
以及clickhouse文档中的重要注意事项:
当clickhouse合并数据部分时,具有过期ttl的数据将被删除。
当clickhouse看到数据过期时,它会执行一个非计划的合并。若要控制此类合并的频率,可以使用\u ttl \u timeout设置merge \u。如果该值太低,它将执行许多非计划的合并,这可能会消耗大量资源。
如果在合并之间执行select查询,则可能会得到过期的数据。要避免这种情况,请在选择之前使用优化查询。