clickhouse分布式表插入数据不用带ON CLUSTER
向分布式表插入数据时,通常 不需要使用 ON CLUSTER
,因为分布式表的写入操作会自动将数据分发到底层表(bm_online_user_count_part
)的对应节点。
但对于 DDL(数据定义语句,例如 ALTER TABLE
) 操作,在分布式环境中修改底层表时,建议使用 ON CLUSTER
,以确保所有相关节点上的表结构和数据同步。
区分 DDL 和 DML
-
DML(数据操作语句,例如
INSERT
) 向分布式表插入数据时,只需简单地插入即可,ClickHouse 会自动将数据分布到各节点的底层表,无需ON CLUSTER
:NSERT INTO aaa.bm_online_user_count (company_code, user_count, hour_str) VALUES ('company1', 100, '2024-12-23 15:00');
-
DDL(数据定义语句,例如
ALTER TABLE
或DELETE
) 在分布式环境中对底层表执行ALTER TABLE
操作时,需要使用ON CLUSTER
来确保所有节点同步执行操作:ALTER TABLE aaa.bm_online_user_count_part ON CLUSTER default DELETE WHERE hour_str = '2024-12-23 14:00';
为什么插入不需要 ON CLUSTER
?
- 分布式表本身就是一个逻辑视图,它会根据其配置自动将数据路由到对应的底层表所在节点。
INSERT
操作在分布式表中不直接作用于多个节点,而是由 ClickHouse 的分布式引擎完成分发。
为什么 ALTER
和 DELETE
需要 ON CLUSTER
?
ALTER
和DELETE
是直接针对底层表执行的操作,它们不会通过分布式引擎自动分发到所有节点。- 如果不加
ON CLUSTER
,操作仅会在当前节点生效,导致其他节点上的数据或表结构不一致。
总结
- 插入数据: 向分布式表
aaa.bm_online_user_count
插入数据时不需要ON CLUSTER
。 - 修改数据: 对底层表
aaa.bm_online_user_count_part
进行DELETE
或其他修改操作时,需要使用ON CLUSTER
,以确保集群内数据一致性。