是否可以在 ClickHouse 中的两个分布式表之间移动数据

Is it possible to move data between two distributed tables in ClickHouse

我认为答案是否定的,但想在这里确认一下。 是否可以在 ClickHouse 中的两个分布式 table 之间移动数据(复制然后删除源)? 比如说,我在所有节点中定义了本地 tables ab,并且 a_dist 定义为:

CREATE TABLE IF NOT EXISTS a_dist ON CLUSTER my_cluster_name AS a ENGINE = Distributed(my_cluster_name, default, a, rand())
CREATE TABLE IF NOT EXISTS b_dist ON CLUSTER my_cluster_name AS a ENGINE = Distributed(my_cluster_name, default, b, rand())

是否可以将所有数据从 a_dist 直接移动到 b_dist?或者我应该将每个节点中的数据从 table a 移动到 table b?

谢谢!

最简单的方法

INSERT INTO b_dist SELECT * FROM a_dist;
TRUNCATE default.a ON CLUSTER 'my_cluster_name';

但它会在您执行此查询的节点与集群中的其他节点之间产生大量数据传输

对于 Atomic 数据库引擎和 clickhouse 21.8+,运行 直接在每个节点上会快得多

EXCHANGE TABLES default.a AND default.b