【问题标题】:ClickHouse: How to move data from tables with different partition keys?ClickHouse:如何从具有不同分区键的表中移动数据?
【发布时间】:2020-09-19 17:10:51
【问题描述】:

我计划在 ClickHouse 中重新设计表,以避免在使用 ReplicatedReplacingMergeTree 时出现一些性能和重复数据删除/版本控制问题。在这里,可以运行 OPTIMIZE FINAL 来删除重复项,但不能连续运行。

因此,我们计划保留一个表 A,每天对传入的数据进行分区。 然后是一个按月分区的表 B,用于存储历史数据。 查询将被定向到包含两者的 MERGE 表(不是 MergeTree)。

然后,我们设置了一个动作,将最新的分区从 A 移动到 B,每天结束后。

但是,移动分区就像MOVE PARTITION TO TABLE 中声明的“两个表必须具有相同的分区键。”,这是不可能的。 一种方法是将数据从 A 的日常分区复制到 B,然后分离/删除 A 中的日常分区。但是同时我们会看到重复。

在影响最小的情况下将此数据从 A 传输到 B 的最佳方法是什么?还有哪些选择?

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    一种方法是将A的日常分区中的数据复制到B,然后 在 A 中分离/删除每日分区。但与此同时,我们会看到重复的。

    您可以将数据复制到中间/临时表 TB(与 B 相同的结构/分区)。然后将分区放在A中,然后从TB移动到B

    【讨论】:

    • 但是在这种情况下,我们将整个月度分区移动到 B。第一次是可以的,但是该月的第二天在 B 中已经有该月的月度分区。所以在这种情况下,我必须在中间表中累积整月,在月内保持,并在月底刷新到 B,包括在 Merge 表中,对吗?然后在月底移动到 B 后,可以刷新中间表 - 冲洗并重复 :) 但在这种情况下,我们在从 A 到 TB 的副本中也存在初始问题。
    • clickhouse.tech/docs/en/sql-reference/statements/alter/… 你可以使用 ATTACH PARTITION FROM
    • 虽然,MOVE PARTITION 也不会从 B 中删除数据。所以,我不明白您为什么需要移动整个月。我认为您可以通过在 B 中添加一天并从 A 中删除一天来做到这一点。
    • 谢谢。看起来 MOVE PARTITION 确实删除了(我希望,原子地,因此我感兴趣):This query moves the data partition from the table_source to table_dest with deleting the data from table_source.。使用 ATTACH PARTITION FROM 我需要 TB 来更改分区键,但看起来它可以工作,谢谢!不过,在那个“变化”的时间里会有重复。
    猜你喜欢
    • 2019-11-22
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2011-01-24
    • 2019-04-23
    • 2018-09-02
    相关资源
    最近更新 更多