Ruj*_*ing 7 minmax secondary-indexes clickhouse
我正在使用Data Skipping Indexesclickhouse 中的该功能,但我对其用法感到困惑。如果我在创建表时添加数据跳过索引,如下所示:
CREATE TABLE MyTable
(
...
INDEX index_time TimeStamp TYPE minmax GRANULARITY 1
)
ENGINE =MergeTree()
...
Run Code Online (Sandbox Code Playgroud)
当我使用TimeStamp过滤条件查询时,“index_time”有效。但是,如果我在创建表时没有添加索引,或者,我添加了具有Manipulations With Data Skipping Indices如下功能的索引:
ALTER TABLEE MyTable ADD INDEX index_time TimeStamp TYPE minmax GRANULARITY 1
Run Code Online (Sandbox Code Playgroud)
那么索引'index_time'不起作用。
我的数据库正在生产中运行,因此我无法重新创建表。我必须使用第二种方法。谁能解释为什么它不起作用或者我以错误的方式使用该功能?
小智 7
您的查询在 ALTER TABLE ADD INDEX 之后不使用索引的原因是因为该索引尚不存在。(!)
任何新数据都将被正确索引,这就是为什么当您将其放入 CREATE TABLE 时索引会起作用。ClickHouse 在加载数据时构建索引。如果您创建了表,运行 ALTER TABLE ADD INDEX 并加载数据,您将看到相同的行为。
当数据已经存在时,情况就不同了。ALTER TABLE 更新表的元数据,但此时所有数据都已写入表中的各个部分。ClickHouse 不会自动重写部分来实现新索引。但是,您应该能够通过运行以下命令强制重写以包含索引:
OPTIMIZE TABLE MyTable FINAL
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅 Ruijang 引用的Github 问题https://github.com/yandex/ClickHouse/issues/6561 。
| 归档时间: |
|
| 查看次数: |
5731 次 |
| 最近记录: |