clickhouse:如何在clickhouse中使用“数据跳过索引”和“对数据跳过索引进行操作”功能?

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

我用的是 Data Skipping Indexes clickhouse中的功能,我对它的用法感到困惑。如果在创建如下表时添加数据跳过索引:

CREATE TABLE MyTable
(
    ...
    INDEX index_time TimeStamp TYPE minmax GRANULARITY 1
)
ENGINE =MergeTree()
...

当我询问 TimeStamp 过滤条件“索引时间”起作用。但如果我在创建表时没有添加索引,或者,我添加了 Manipulations With Data Skipping Indices 特点如下:

ALTER TABLEE MyTable ADD INDEX index_time TimeStamp TYPE minmax GRANULARITY 1

那么索引“index\u time”就不起作用了。
我的数据库正在生产上运行,因此无法重新创建表。我得用第二种方法。有人能解释为什么它不起作用或者我用错了这个功能吗?

cnjp1d6j

cnjp1d6j1#

查询在alter table add index之后不使用索引的原因是该索引尚不存在。(!)
任何新数据都将被正确地索引,这就是为什么当您将索引放入create表时,索引可以工作的原因。clickhouse在加载数据时构建索引。如果您创建了表,运行altertableaddindex,并加载了数据,您将看到相同的行为。
当数据已经存在时,情况就不同了。ALTERTABLE更新表的元数据,但此时所有数据都已写入表中的部分。clickhouse不会自动重写部分以实现新索引。但是,您应该能够通过运行以下命令强制重写以包含索引:

OPTIMIZE TABLE MyTable FINAL

查看github问题https://github.com/yandex/clickhouse/issues/6561 更多信息请参考瑞江。

相关问题