是否可以更改现有 clickhouse 表的表引擎?

Kir*_*bun 9 clickhouse

是否可以像MySQL中那样更改 clickhouse 表中的表引擎,如下所示:

CREATE TABLE example_table (id UInt32, data String) ENGINE=MergeTree() ORDER BY id;
ALTER example_table ENGINE=SummingMergeTree();
Run Code Online (Sandbox Code Playgroud)

因为我在文档中没有找到这样的功能。

如果不可能,是否有计划在不久的将来实现它,或者哪些架构限制阻止这样做?

Den*_*ane 18

可以通过多种方式更改引擎。

\n

但无法更改 PARTITION BY / ORDER BY。这就是为什么它没有明确记录的原因。所以在 99.99999% 的情况下它没有任何意义。SummingMergeTree 使用表ORDER BY作为折叠规则和现有的ORDER BY通常不适合。

\n

下面是一种方法的示例(不那么 hacky),\n(您可以将分区从一个表复制到另一个表,它几乎是免费操作,它利用 FS 硬链接并且不复制真实数据)。(COW——写时复制)。

\n
CREATE TABLE example_table (id UInt32, data Float64) \nENGINE=MergeTree() ORDER BY id;\n\nInsert into example_table values(1,1), (1,1), (2,1);\n\n\nCREATE TABLE example_table1 (id UInt32, data Float64) \nENGINE=SummingMergeTree() ORDER BY id;\n\n-- this does not copy any data (instant & almost free command)\nalter table example_table1 attach partition tuple() from example_table;\n\nSELECT * FROM example_table1;\n\xe2\x94\x8c\xe2\x94\x80id\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80data\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82  1 \xe2\x94\x82    1 \xe2\x94\x82\n\xe2\x94\x82  1 \xe2\x94\x82    1 \xe2\x94\x82\n\xe2\x94\x82  2 \xe2\x94\x82    1 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n\noptimize table example_table1 final;\n\nselect * from example_table1;\n\xe2\x94\x8c\xe2\x94\x80id\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80data\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82  1 \xe2\x94\x82    2 \xe2\x94\x82\n\xe2\x94\x82  2 \xe2\x94\x82    1 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n

另一种方式(编辑元数据文件,如果表已复制,ZK也会记录)

\n
detach table example_table;\n\nvi /var/lib/clickhouse/metadata/default/example_table.sql\nreplace MergeTree with SummingMergeTree\n\nattach table example_table;\n\nSHOW CREATE TABLE example_table\n\n\xe2\x94\x8c\xe2\x94\x80statement\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 CREATE TABLE default.example_table\n(\n    `id` UInt32,\n    `data` Float64\n)\nENGINE = SummingMergeTree\nORDER BY id\nSETTINGS index_granularity = 8192 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n\nSELECT * FROM example_table;\n\n\xe2\x94\x8c\xe2\x94\x80id\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80data\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82  1 \xe2\x94\x82    1 \xe2\x94\x82\n\xe2\x94\x82  1 \xe2\x94\x82    1 \xe2\x94\x82\n\xe2\x94\x82  2 \xe2\x94\x82    1 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n\noptimize table example_table final;\n\nSELECT * FROM example_table;\n\xe2\x94\x8c\xe2\x94\x80id\xe2\x94\x80\xe2\x94\xac\xe2\x94\x80data\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82  1 \xe2\x94\x82    2 \xe2\x94\x82\n\xe2\x94\x82  2 \xe2\x94\x82    1 \xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xb4\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x98\n
Run Code Online (Sandbox Code Playgroud)\n