【问题标题】:ClickHouse TTL on materialized column具体化列上的 ClickHouse TTL
【发布时间】:2020-01-26 21:46:54
【问题描述】:

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


【解决方案1】:

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

当 ClickHouse 合并数据部分时,将删除具有过期 TTL 的数据。

当 ClickHouse 看到数据过期时,它会执行计划外 合并。要控制此类合并的频率,您可以设置 merge_with_ttl_timeout。如果值太低,它会执行很多 可能会消耗大量资源的计划外合并。

如果您在合并之间执行 SELECT 查询,您可能会过期 数据。为避免这种情况,请在 SELECT 之前使用 OPTIMIZE 查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多