在物化列上单击house ttl

wa7juj8i  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(407)

我正在尝试将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

问题是,它不会删除旧数据。我在文档中找不到任何有助于调试此问题的内容。
问题:
如何调试此问题(有没有办法知道将来什么时候数据会被清除?
这可能是因为日期字段被具体化了吗?我有另一个表,其中日期不是一个具体的领域和一切工作正常。

r55awzrz

r55awzrz1#

是的,您可以使用具有ttl特性的物化字段。我附加了一个简单的查询,可以创建一个表,每隔5分钟删除一次。它在clickhouse服务器版本20.4.5上运行良好

CREATE TABLE IF NOT EXISTS test.profiling
(
    headtime UInt64, 
    date DateTime MATERIALIZED toDateTime(headtime),  
    id Int64,  
    operation_name String,
    duration Int64
)   
ENGINE MergeTree()
PARTITION BY toYYYYMM(date)
ORDER BY (date, id)
TTL date + INTERVAL 5 MINUTE

以及clickhouse文档中的重要注意事项:
当clickhouse合并数据部分时,具有过期ttl的数据将被删除。
当clickhouse看到数据过期时,它会执行一个非计划的合并。若要控制此类合并的频率,可以使用\u ttl \u timeout设置merge \u。如果该值太低,它将执行许多非计划的合并,这可能会消耗大量资源。
如果在合并之间执行select查询,则可能会得到过期的数据。要避免这种情况,请在选择之前使用优化查询。

相关问题