资讯动态

ClickHouse v25.8.3.66-lts 版本解析:Delta Lake 写入控制、Iceberg 读取修复与 Keeper 递归删除优化

发布时间:2026/9/19 17:11:50 来源:尧图企业网站定制
ClickHouse v25.8.3.66-lts 版本解析Delta Lake 写入控制、Iceberg 读取修复与 Keeper 递归删除优化【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse导读本文以 ClickHouse 官方 LTS 分支补丁版本v25.8.3.66-ltscommitea12745c77a基线为 v25.8.2.29-lts的完整 变更日志 为主体逐条解读本次补丁版本引入的 1 项功能改进、22 项用户可见 Bug 修复、1 项构建改进及若干内部修复。读完本文你将掌握该版本在 Delta Lake 写入路径上的新设置项及其源码实现、Iceberg 表读取/分区解析的修复要点、Keeper 递归删除的性能优化以及各组件的升级验证思路并能在升级到该版本后快速定位对应源码与测试位置。一、版本背景与变更总览v25.8.3.66-lts 是 ClickHouse 25.8 系列的一个LTS 维护补丁版本仅包含面向稳定分支的回移backport改动不含新功能迭代。从变更日志结构看改动分为四类分类数量说明Improvement功能改进4含 1 项新设置与 3 项错误信息/性能改进Bug Fix用户可见缺陷修复22覆盖 Delta Lake、Iceberg、JSON、备份、S3Queue、ArrowFlight 等模块Build/Testing/Packaging1升级openldap至 2.6.10NOT FOR CHANGELOG内部修复4序列化、功能开关、keep-alive、schema 解析回退改进与修复的高频主题集中在三块数据湖Delta Lake / Iceberg、列/数据类型subcolumn、LowCardinality、JSON以及分布式协调Keeper、Replicated Database、distributed DDL。下面按主题逐一深入。二、Improvement数据湖写入与系统健壮性改进2.1 新增 Delta Lake 插入数据文件的行数/字节数上限设置本版本最实质性的功能新增来自 PR #86357为 Delta Lake 插入的数据文件添加行数与字节数上限由设置delta_lake_insert_max_rows_in_data_file和delta_lake_insert_max_bytes_in_data_file控制。在 src/Core/Settings.cpp 中可以找到这两个设置的完整定义DECLARE(NonZeroUInt64, delta_lake_insert_max_rows_in_data_file, 1000000, R( Defines a rows limit for a single inserted data file in delta lake. ), 0) \ DECLARE(NonZeroUInt64, delta_lake_insert_max_bytes_in_data_file, 1_GiB, R( Defines a bytes limit for a single inserted data file in delta lake. ), 0) \默认值delta_lake_insert_max_rows_in_data_file 1000000每数据文件最多 100 万行delta_lake_insert_max_bytes_in_data_file 1_GiB每数据文件最多 1 GiB。类型NonZeroUInt64即取值必须为非零正整数设置为 0 会被拒绝。语义单个插入数据文件即写入到对象存储的一个 Parquet 文件达到行数或字节数任一上限时后续数据写入新的数据文件。源码级验证在 DeltaLakeSink.cpp 的consume逻辑中每次消费一个 chunk 前都会检查这两个上限并决定是否轮换数据文件if (data_files.empty() || data_files.back().written_bytes data_file_max_bytes || data_files.back().written_rows data_file_max_rows) { data_files.emplace_back(createStorageSink()); }分区写入路径同样受控在 DeltaLakePartitionedSink.cpp 中按分区独立维护written_rows / written_bytes并在达到上限时切换文件。实战建议写入体量极大的场景可通过调大这两个值减少生成的数据文件数量降低元数据与对象数量开销反之希望生成更细粒度文件例如便于下游任务按文件并行处理时可调小。两个设置均为会话级设置可在INSERT语句前通过SET或查询级设置直接生效。注意 Delta Lake 写入本身是实验特性需要同时开启allow_experimental_delta_lake_writes即allow_delta_lake_writes见 src/Core/Settings.cpp。2.2 损坏元数据下SYSTEM DROP REPLICA报错修复PR #86391修复针对元数据损坏的 Catalog 执行SYSTEM DROP REPLICA时出现的错误。该修复让运维在 Catalog/元数据处于异常状态时仍能完成副本清理动作避免清理操作被元数据问题阻塞。2.3 Multipart Upload 竞态下错误信息误导修复PR #86725修复分片上传multipart upload中因竞态条件导致原始异常丢失、仅剩一句误导性的 specified upload does not exist 的问题。修复后错误信息能保留根因便于诊断对象存储写入失败。2.4 KeeperRemoveRecursive请求性能优化PR #86789其请求分发在KeeperStorageImpl的process逻辑中同文件 L153-L154 的case Coordination::OpNum::RemoveRecursive。同系列修复还在 PR #86554 中为RemoveRecursive加入 Multi 请求时检查特性开关见 NOT FOR CHANGELOG 一节确保旧客户端/旧请求不被新实现破坏。三、Bug Fix上Delta Lake 与 Iceberg 数据湖修复3.1 Delta Lake 相关修复修复写入 DeltaLake 时的逻辑错误PR #86367关闭 issue #86175针对写入路径上的逻辑错误logical error进行修复保证INSERT INTO ... DeltaLake在合法输入下不会抛错。非默认列映射模式下 subcolumn 读取修复PR #86064修复存储引擎 DeltaLake 在非默认列映射模式column mapping mode下读取 subcolumn如map.key、nested.field之类的嵌套子列的错误。3.2 Iceberg 相关修复Iceberg 是本版本修复最密集的模块之一涉及 schema、分区表达式、缓存与迭代器Iceberg source id 与 Parquet 名称映射修复PR #85829此前当 Parquet 文件写入时Iceberg source id 到 Parquet 列名的映射未按 schema 调整。修复后每个 Iceberg 数据文件都使用与其自身相关的 schema而非当前schema避免列对应错位。Iceberg 分区表达式解析 UB 与错误修复PR #86166移除解析 Iceberg 分区表达式partition expression过程中的未定义行为UB并修复解析错误。Iceberg 元数据缓存与文件系统缓存联动修复PR #86635。Iceberg Iterator 异步执行异常处理PR #86932。Manifest 文件条目 schema 解析回退PR #86832归入内部修复当某个 manifest 文件条目的 schema 解析失败时恢复回退解析逻辑保证部分损坏的 manifest 不影响整体读取。这些修复对应的完整数据湖代码位于 src/Storages/ObjectStorage/DataLakes/ 目录其中 Iceberg 实现集中在 Iceberg/Delta Lake 实现位于 DeltaLake/便于读者按需深入。四、Bug Fix中列类型、表达式与 JSON 相关修复物化列 subcolumn 更新修复PR #85985修复ALTER UPDATE一个其表达式依赖其他列 subcolumn 的列时物化列未正确更新的问题。禁止修改 subcolumn 被 PK / 分区表达式引用的列PR #86005若某列的 subcolumn 出现在主键PK或分区partition表达式中现在禁止对该列执行ALTER修改从源头避免索引/分区结构被破坏。LowCardinality(Nullable(T))到Dynamic的 cast 修复PR #86365修复由LowCardinality(Nullable(T))转换为Dynamic类型时的错误。GROUP BY Nullable(JSON)修复PR #86410修复对Nullable(JSON)列执行GROUP BY时的错误。RowBinary 下向 JSON 共享数据写入 NULL 的修复PR #86812修复RowBinary输入格式下向 JSON 共享数据写 NULL 的问题并在ColumnObject中补充额外校验。PARTITION BY不带分区通配符时误报异常修复PR #86748修复在 25.8 之前可以正常工作、但 25.8 起在PARTITION BY未含_partition_id通配符时误报Partition strategy wildcard can not be used without a _partition_id wildcard.异常的问题恢复向后兼容。五、Bug Fix下备份、复制、S3Queue 与协议层修复Backup 数据库引擎零尺寸 part 文件异常PR #86563修复备份数据库引擎Backup db engine在查询包含零尺寸 part 文件时抛异常的问题。send_chunk_header HTTP 协议下 UDF 缺失 chunk headerPR #86606修复启用send_chunk_header且通过 HTTP 协议调用 UDF 时缺少 chunk header 导致响应解析失败的问题。S3Queue 逻辑错误修复PR #86615修复因 Keeper 会话过期引发的 S3Queue 逻辑错误Expected current processor {} to be equal to {}。ArrowFlight 关闭流程修复PR #86665关闭 issue #86596修复ArrowFlighthandler 的关闭shutdown问题避免服务关闭时挂起。TimeSeries 引擎阻断 Replicated Database 新副本创建PR #86845修复 TimeSeries 引擎表导致 Replicated Database 无法创建新副本的问题。system.distributed_ddl_queue查询修复PR #86848修复当任务缺失部分 Keeper 节点时查询system.distributed_ddl_queue出错的问题。解压块末尾 seek 修复PR #86906修复在解压块末尾执行 seek 操作时的错误。PREWHERE 拆分多步后的输出 cast 修复PR #87040修复PREWHERE被拆分为多个步骤后输出未正确 cast 的问题。聚合函数状态与 String 参数的兼容性修复PR #87049修复部分聚合函数状态aggregate function state与 String 参数的兼容性问题避免对既有状态做反序列化/组合时出错。六、构建/测试/打包改进与内部修复6.1 Build/Testing/Packaging升级openldap至 2.6.10PR #86623 与 contrib/openldap-cmake。6.2 NOT FOR CHANGELOG内部修复PR修复内容#86397修复ReadFromFormatInfo的序列化问题#86554将RemoveRecursive加入 Multi 请求时检查特性开关与 Keeper 递归删除优化配套#86631修复服务器间调用inter-server calls的 keep-alive 问题#86832恢复 manifest 文件条目 schema 解析的回退逻辑见 3.2 节这类修复不直接改变用户可见行为但通常与当版本其他改动存在耦合例如RemoveRecursive相关两项升级时建议一并关注。七、升级与验证指引升级路径本版本为 25.8 系列的 LTS 补丁可直接从 v25.8.2.29-lts 等 25.8 小版本平滑升级跨大版本升级请遵循 ClickHouse 常规的版本跳级规则。升级后重点回归项若在使用 Delta Lake 写入验证新设置项delta_lake_insert_max_rows_in_data_file/delta_lake_insert_max_bytes_in_data_file生效并检查生成数据文件数量是否符合预期若在使用 Iceberg 表回归含复杂分区表达式与多 schema 演进的查询确认 3.2 节的解析/映射修复有效若在用 Keeper 并高频执行递归删除如清理临时子树观察RemoveRecursive请求延迟是否改善若通过 HTTP 协议调用 UDF 且启用了send_chunk_header回归响应解析。验证位置相关设置的默认值与完整说明见 src/Core/Settings.cppKeeper 递归删除实现见 src/Coordination/KeeperStorageImpl.cpp数据湖实现见 src/Storages/ObjectStorage/DataLakes/对应的回归测试可参考 tests/integration 与 tests/queries 中delta_lake、iceberg相关用例。【免费下载链接】ClickHouseClickHouse® is a real-time analytics database management system项目地址: https://gitcode.com/GitHub_Trending/cli/ClickHouse创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价