You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ClickHouse:操作执行中使用insert into...select是否会复制新增数据?

ClickHouse中INSERT INTO ... SELECT的数据复制规则

核心问题解答

问题1:ClickHouse是否会通过INSERT INTO ... SELECT复制新数据?

默认情况下,INSERT INTO ... SELECT会基于查询执行开始时刻的数据快照读取源表内容,只会复制语句启动时已存在且提交完成的数据,不会包含语句执行过程中新增的数据。

这是因为ClickHouse默认采用**快照隔离(Snapshot Isolation)**级别:查询启动时会生成一个数据快照,整个查询周期都基于该快照读取,不受并发写入操作的干扰。

问题2:当已有操作正在执行时,INSERT INTO ... SELECT是否会复制新增的数据?

不会。即使在INSERT INTO ... SELECT执行期间,有其他写入操作(如另一个INSERT)向源表新增数据,这些后续写入的数据也不会被当前语句读取到。

本质还是快照隔离机制的作用:查询启动时的快照固定了数据范围,后续新增的数据属于快照之后的版本,不会被纳入当前查询的结果集。

补充说明:ClickHouse隔离级别细节

ClickHouse主要支持两种隔离级别:

  • 快照隔离(默认):所有查询基于启动时刻的快照,读不阻塞写、写不阻塞读,避免脏读、不可重复读问题。
  • 读已提交(Read Committed):可通过设置settings allow_read_committed = 1启用,此时查询会读取最新已提交数据,但可能出现不可重复读。不过即使启用该级别,INSERT INTO ... SELECT仍基于查询启动时的快照执行——这类批量操作需要保证数据一致性,不会实时读取执行过程中的新增数据。

内容的提问来源于stack exchange,提问作者Hett

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:05:56