尝试创建由元组分区的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 │ 1 │
│ 2000-01-01 │ 1 │ first │ 2 │
└────────────┴───┴───────┴───┘
尝试优化表格:
OPTIMIZE TABLE partitioned_by_tuple;
并希望像这样:
┌──────────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 │
└────────────┴───┴───────┴───┘
但是表在优化后不会更改。
我在做什么错了?
答案 0 :(得分:0)
根据https://clickhouse.yandex/docs/en/single/#optimize
如果您指定FINAL,即使所有数据都已经在一个部分中,也会执行优化。
您需要在末尾指定FINAL
,以强制将优化内容嵌入到一个部分中。
编辑:
此PR https://github.com/yandex/ClickHouse/pull/2599之后,OPTIMIZE将能够使用FINAL合并所有部分。
现在已合并。