在 ClickHouse 中重命名表时究竟会发生啥?

Posted

技术标签:

【中文标题】在 ClickHouse 中重命名表时究竟会发生啥?【英文标题】:What exactly happens when renaming tables in ClickHouse?在 ClickHouse 中重命名表时究竟会发生什么? 【发布时间】:2020-06-09 11:38:32 【问题描述】:

我阅读了https://clickhouse.tech/docs/en/sql-reference/statements/misc/#misc_operations-rename 并知道所有表都在全局锁定下重命名。

我的重命名案例是

rename table t_real_table to t_archive, t_new_data to t_real_table

为了归档旧的t_real_table 并使新生成的表t_new_data 用作t_real_table

我有时会在重命名期间发现一些查询 (select * from t_real_table) 失败 (Table t_real_table doesn't exist)。重命名似乎不是一个非常短暂的过程。我想知道重命名表时究竟会发生什么,以便找到避免此类失败的方法。

是不是把metadata/t_real_table.sql改成metadata/t_archive.sql,把data/default/t_real_table/的路径名改成data/default/t_archive/,然后把metadata/t_new_data.sql改成metadata/t_real_table.sql,把data/default/t_new_data/的路径名改成data/default/t_real_table/

如果是这样,我认为重命名不会持续这么久。但是如何避免重命名过程中的失败呢? Atomic Engine靠谱吗?

【问题讨论】:

【参考方案1】:

https://github.com/ClickHouse/ClickHouse/issues/11555#issuecomment-642011592

文档有误。没有全局锁,它被删除了

6757

【讨论】:

以上是关于在 ClickHouse 中重命名表时究竟会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

在Mac中重命名没有突出显示扩展名的文件名[关闭]

在 EF Core 3 中重命名 IdentityRole 表

当我设置 IIS 池的 LoadUserProfile 时究竟会发生啥?

在 Hive 表中重命名名称为 count( distinct( id )) 的列

将 const 引用返回到本地对象时究竟会发生啥?

在 C 程序中,如果我从 /usr/include 的头文件中调用函数,究竟会发生啥? [关闭]