【问题标题】:Alter table on cluster更改集群上的表
【发布时间】:2021-09-25 02:05:54
【问题描述】:

我必须添加将 Nullable 数据存储到现有表的某些列中的功能,但是此表具有 ReplicatedMergeTree 引擎。所以我有一个问题,如果集群修改列上存在命令 alter table ...? 以及它的时间成本是多少? 谢谢!

【问题讨论】:

  • 复制表会自动将此类更改传播到所有副本。如果您使用分片,则需要手动或使用 on_cluster 在每个分片上应用此类更改。如果您有此表,您还需要在分布式和缓冲区表上应用匹配的更改。
  • 我建议重新创建列(创建另一列并重新提取数据,或者只是开始将新版本的数据写入新列)。 ClickHouse 中的突变并不“便宜”,并且不能保证您的数据不会以任何方式损坏。
  • 我决定使用假设NotNull 函数来替换此列中的空值。它将使分区性能更好。谢谢大家!

标签: clickhouse


【解决方案1】:

这是集群上修改查询的语法,它也会更新副本(但可能需要一段时间)。

ALTER TABLE example_table ON CLUSTER example_cluster MODIFY COLUMN IF EXISTS `example_column` Nullable(UInt8)

对于进行操作所需的时间,它取决于很多参数(数据量,硬件......),如果没有更多信息,我们无法估计。

通常,当我们进行此类修改并希望确保它不会花费太多时间并且它可以正常工作时,我们会进行一些基准测试来估计所需的时间。

【讨论】:

  • 我决定使用假设NotNull 函数来替换此列中的空值。它将使分区性能更好。谢谢!
猜你喜欢
  • 2021-05-20
  • 2011-01-18
  • 2018-08-22
  • 1970-01-01
  • 2020-07-02
  • 2014-10-22
  • 2021-05-07
  • 1970-01-01
  • 2020-12-18
相关资源
最近更新 更多