Optimization 按元组划分的SummingMergeTree

Optimization 按元组划分的SummingMergeTree,optimization,tuples,clickhouse,Optimization,Tuples,Clickhouse,尝试创建按元组分区的SummingMergeTree,如下所示: CREATE TABLE partitioned_by_tuple(d Date, x UInt8, w String, y UInt8) ENGINE SummingMergeTree (y) PARTITION BY (d, x) ORDER BY (d, x, w); ┌──────────d─┬─x─┬─w─────┬─y─┐ │ 2000-01-02 │ 1 │ first │ 3 │ └────────────┴──

尝试创建按元组分区的SummingMergeTree,如下所示:

CREATE TABLE partitioned_by_tuple(d Date, x UInt8, w String, y UInt8) ENGINE SummingMergeTree (y) PARTITION BY (d, x) ORDER BY (d, x, w);
┌──────────d─┬─x─┬─w─────┬─y─┐
│ 2000-01-02 │ 1 │ first │ 3 │
└────────────┴───┴───────┴───┘
┌──────────d─┬─x─┬─w─────┬─y─┐
│ 2000-01-01 │ 2 │ first │ 2 │
└────────────┴───┴───────┴───┘
┌──────────d─┬─x─┬─w─────┬─y─┐
│ 2000-01-01 │ 1 │ first │ 3 │
└────────────┴───┴───────┴───┘
在表中插入数据:

┌──────────d─┬─x─┬─w─────┬─y─┐
│ 2000-01-02 │ 1 │ first │ 3 │
└────────────┴───┴───────┴───┘
┌──────────d─┬─x─┬─w─────┬─y─┐
│ 2000-01-01 │ 2 │ first │ 2 │
└────────────┴───┴───────┴───┘
┌──────────d─┬─x─┬─w─────┬─y─┐
│ 2000-01-01 │ 1 │ first │ 1 │
│ 2000-01-01 │ 1 │ first │ 2 │
└────────────┴───┴───────┴───┘
正在尝试优化表:

OPTIMIZE TABLE partitioned_by_tuple;
并期望像这样:

CREATE TABLE partitioned_by_tuple(d Date, x UInt8, w String, y UInt8) ENGINE SummingMergeTree (y) PARTITION BY (d, x) ORDER BY (d, x, w);
┌──────────d─┬─x─┬─w─────┬─y─┐
│ 2000-01-02 │ 1 │ first │ 3 │
└────────────┴───┴───────┴───┘
┌──────────d─┬─x─┬─w─────┬─y─┐
│ 2000-01-01 │ 2 │ first │ 2 │
└────────────┴───┴───────┴───┘
┌──────────d─┬─x─┬─w─────┬─y─┐
│ 2000-01-01 │ 1 │ first │ 3 │
└────────────┴───┴───────┴───┘
但表在优化后并没有改变

我做错了什么?

根据

如果指定FINAL,即使所有数据都已包含在一个零件中,也将执行优化

您需要在末尾指定
FINAL
,以强制在一个零件内执行优化

编辑:

在此PR优化后,将能够使用FINAL合并所有零件


现在合并了。

当我在做“优化表分区的”时,会引发异常:优化查询的最终标志只有指定的分区才是有意义的。是的,因为所有合并选择器都不考虑只有一个部分的分区,因此<代码>最终< /代码>将没有任何效果。我想知道这是否是一个实际问题。至少可以简单地扩展。是的,这是一个实际问题。我正试图找到一种方法来改进我的分析系统