跳转到主要内容
ALTER TABLE [db.]table [ON CLUSTER cluster] APPLY PATCHES [IN PARTITION partition_id]
该命令会手动触发对由轻量级 UPDATE语句创建的补丁分区片段进行物理物化。它会仅重写受影响的列,强制将待处理的补丁应用到数据分区片段。
  • 它仅适用于 MergeTree 家族中的表 (包括复制表) 。
  • 这是一个变更操作,会在后台异步执行。

何时使用 APPLY PATCHES

一般情况下,你不需要使用 APPLY PATCHES
启用 apply_patches_on_merge 设置 (默认) 后,补丁分区片段通常会在合并过程中自动应用。不过,在以下场景中,你可能希望手动触发补丁应用:
  • 减少在 SELECT 查询期间应用补丁带来的开销
  • 在多个补丁分区片段积累起来之前先将其合并
  • 为备份或导出准备数据,并提前将补丁物化
  • apply_patches_on_merge 被禁用,而你希望自行控制补丁的应用时机时

示例

将某个表的所有待处理补丁全部应用:
ALTER TABLE my_table APPLY PATCHES;
仅对特定分区应用补丁:
ALTER TABLE my_table APPLY PATCHES IN PARTITION '2024-01';
可与其他操作结合使用:
ALTER TABLE my_table APPLY PATCHES, UPDATE column = value WHERE condition;

监控补丁应用进度

你可以使用 system.mutations 表来监控补丁应用的进度:
SELECT * FROM system.mutations
WHERE table = 'my_table' AND command LIKE '%APPLY PATCHES%';

另请参见

最后修改于 2026年6月10日