【问题标题】:SummingMergeTree partitioned by tupleSummingMergeTree 按元组分区
【发布时间】:2018-12-06 02:37:09
【问题描述】:

尝试创建由元组分区的 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 │
└────────────┴───┴───────┴───┘

但是优化后表格没有变化。

我做错了什么?

【问题讨论】:

    标签: optimization tuples clickhouse


    【解决方案1】:

    根据https://clickhouse.yandex/docs/en/single/#optimize

    如果您指定 FINAL,即使所有数据都已在一个部分中,也会执行优化。

    您需要在末尾指定FINAL 以强制在一个部分内执行优化。

    编辑:

    经过此 PR https://github.com/yandex/ClickHouse/pull/2599 OPTIMIZE 将能够使用 FINAL 合并所有部分。

    现在已经合并了。

    【讨论】:

    • 当我执行“OPTIMIZE TABLE partitioned_by_tuple FINAL”时抛出异常:OPTIMIZE 查询的 FINAL 标志仅对指定的 PARTITION 有意义。
    • 是的,因为所有的合并选择器都不考虑只有一个部分的分区,因此FINAL 不会有任何效果。我想知道这是否是一个实际问题。至少它可以简单地扩展。
    • 是的,这是实际问题。我正在努力寻找一种方法来改进我的分析系统
    猜你喜欢
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2012-09-19
    • 2019-10-31
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多