ttl - ClickHouse 物化列上的 TTL

标签 ttl clickhouse

我正在尝试将 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. 如何调试此问题? (有没有办法查看以后数据什么时候被清除)?

  2. 这可能是因为日期字段被具体化了吗?我有另一个表,其中日期不是具体化字段,一切正常。

最佳答案

是的,您可以使用具有 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 的重要说明 documentation :

Data with an expired TTL is removed when ClickHouse merges data parts.

When ClickHouse see that data is expired, it performs an off-schedule merge. To control the frequency of such merges, you can set merge_with_ttl_timeout. If the value is too low, it will perform many off-schedule merges that may consume a lot of resources.

If you perform the SELECT query between merges, you may get expired data. To avoid it, use the OPTIMIZE query before SELECT.

关于ttl - ClickHouse 物化列上的 TTL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58119766/

相关文章:

php - 将消息 TTL 设置为一小时 RabbitMQ

icmp - scapy:修改嗅探流量的 TTL 的正确方法

database - 有没有办法设置 "expiry"时间,之后在 PostgreSQL 中自动删除数据条目?

node.js - Redis 同时进行 INCR、SORT 和 TTL?

sql - 将 clickhouse 数组作为列返回

clickhouse - ClickHouse中如何避免数据重复

sql - Clickhouse 选择所有表上没有 max() 的最后一条记录

sql - 如何使用Clickhouse中的主键和外键功能?

mongodb - 从clickhouse中的外部字典中检索所有记录

javascript - 是否有一种标准方法可以使用 Meteor 和 moment.js 在某个时间从集合中删除 Mongo 文档?