宽屏模式

clickhouse 轻量级更新

轻量级更新

根据官方文档和版本变更记录,ClickHouse在25.8版本中引入了基于补丁部分(Patch Parts) 的轻量级更新机制,但该功能依赖于两个系统列的物化:

  • _block_number:数据块编号
  • _block_offset:块内偏移量

现有表启用轻量级更新

  1. 启用块编号和偏移列:
ALTER TABLE raw_payment_logs_2025 
MODIFY SETTING 
  enable_block_number_column = 1,  -- 启用块编号列
  enable_block_offset_column = 1;   -- 启用块内偏移列
  1. 启用实验性轻量级更新功能(会话级别):
SET allow_experimental_lightweight_update = 1;
  1. 执行轻量级更新(使用标准SQL语法):
UPDATE raw_payment_logs_2025 
SET column1 = value1, column2 = value2 
WHERE condition;

关键说明:

参数 作用 注意事项
enable_block_number_column 存储数据块编号,用于定位更新行 启用后无法禁用,会增加存储开销
enable_block_offset_column 存储块内偏移量,精确标识行位置 与上一参数必须同时启用
allow_experimental_lightweight_update 允许使用实验性轻量级更新功能 需在每次会话中设置或写入配置文件

工作原理类比

轻量级更新类似于Git的差异补丁(diff)机制:

  • 传统更新:重写整个数据文件(如同替换整个文件)
  • 轻量级更新:仅记录变更部分(如同提交diff补丁),查询时动态合并原始数据与补丁

这种方式显著降低了小批量更新的I/O开销,但会增加查询时的计算开销(需实时应用补丁)。

适用场景与限制

  • 适用:小批量更新(建议单批次不超过表数据量的10%)
  • 不适用:大批量更新或频繁更新同一份数据(可能导致补丁累积过多,影响查询性能)
  • 限制:不支持更新分区键或主键列,不支持复杂子查询

Larwas
请先登录后发表评论
  • latest comments
  • 总共0条评论