Release 3.1.1
概述
Apache Doris 3.1.1 是一个维护版本,重点在于关键性错误修复、性能优化和稳定性提升。此版本包含大量针对数据合并(compaction)、数据导入、查询处理和云功能的修复,使其在生产环境中更加稳健可靠。
新特性
核心功能
数据集成与存储
[feat](hdfs)
新增 HDFS 高可用(HA)配置验证(#55675, #55764)[feat](checker)
为校验器增加 Tablet 统计键一致性检查(#54754, #55663)[feat](outfile)
在outfile
和导出中支持 CSV 格式的压缩类型(#55392, #55561)[feat](cloud)
支持云环境下 Group Commit Stream Load 的 BE 转发模式(#55326, #55527)
性能与优化
改进
性能优化
[opt](cloud)
减少元数据服务中空 Rowset 带来的压力(#54395, #55171, #55604, #55742, #55837, #55934)[Opt](mow)
优化 MOW 导入性能和 CPU 使用率(#55073, #55733, #55771, #55767)[opt](hive)
将hive.recursive_directories
默认值设为 true(#55737, #55905)[opt](recycler)
避免频繁发起Aws::Internal::GetEC2MetadataClient
HTTP 请求(#55546, #55682)[opt](mow)
不再捕获调用栈以降低 CPU 开销(#55368, #55526)[opt](txn lazy commit)
使临时 Rowset 批量转换逻辑更具自适应性(#55035, #55573)[opt](nereids)
优化将大字符串转换为复杂类型时的性能(#55476, #55521)[opt](nereids)
支持简化字符串范围(#55378, #55456)[opt](nereids)
优化窗口函数的规范化逻辑(#54947, #55046)[opt](nereids)
当 OLAP 表具有自动分区时,优化 INSERT 命令的并行度(#54983, #55030)
系统增强
[enhancement](Log)
将部分日志级别从 info 调整为 debug(#55808, #55841)[enhancement](filecache)
支持多个缓存实例之间并行清理缓存(#55259, #55437)[enhancement](sc)
禁止对隐藏列执行 Schema Change(#53376, #55385)[enhancement](backup)
在备份过程中正确处理已被删除的表和分区(#52935, #54989)[enhancement](cloud)
修复从 Doris 2.1 版本恢复到 3.1 版本时的云恢复问题(#55110)[enhancement](type)
支持 time 与 datetime 类型之间的相互转换(#53734, #54985)
基础设施改进
[refactor](credential)
使用统一架构重构临时凭证系统(#55912)[refactor](cloud)
将云恢复中创建 Tablet 的 RPC 拆分为多个批次(#55691)[opt](editlog)
在 FE 异常时增加跳过某些 editlog 异常的能力(#54090, #55204)
关键性错误修复
合并与存储
[fix](sc)
对于版本号 ≤ alter_version 的空 Rowset,跳过版本空洞填充(#56209, #56212)[fix](compaction)
修复合并后输入 Rowset 被过早驱逐,导致查询失败的问题(#55382, #55966)[fix](compaction)
使创建 Tablet 操作具有幂等性,从而保证合并任务的幂等性(#56061, #56108)[fix](compaction)
在段合并(segcompaction)中使用 Rowset 元数据文件系统,并增加 RPC 客户端就绪检查(#55951, #55988)[fix](compaction)
在合并过程中跳过合并分数为 0 的 Tablet(#55550, #55570)
查询处理与函数
[fix](fold constant)
abs
函数的返回类型应与参数类型一致(#56190, #56210)[fix](fold constant)
当 float/double 值为 NaN 时,不在 BE 端进行常量折叠(#55425, #55874)[Fix](function)
修复unix_timestamp
函数返回的小数位数错误(#55013, #55962)[fix](nereids)
修复因精度丢失或空值转换导致的比较谓词简化错误(#55884, #56110)[fix](nereids)
修复在 Join 重排时抛出“eq 函数不存在”异常的执行错误(#54953, #55667)[fix](nereids)
修复窗口表达式别名复用时的表达式 ID 错误(#55286, #55486)[fix](nereids)
在与count()
聚合函数比较时,使用 bigint 字面量而非 int(#55545, #55590)[fix](nereids)
在生成巨大表达式时停止合并投影(#55293, #55519)
数据加载与导入
[fix](load)
修复 S3 导入连接检查失败的问题(#56123)[fix](load)
修复已完成导入任务进度显示不正确的问题(#55509, #55530)[fix](load)
修复特定导入错误场景导致 BE 崩溃(core dump)的问题(#55500)[fix](load)
修复 Routine Load 任务因 MEM_LIMIT_EXCEED 失败后无法再次调度的问题(#55481, #55616)
云与分布式功能
[fix](cloud)
在replayUpdateCloudReplica
中移除无用的表锁(#55579, #55955)[fix](cloud)
calc_sync_versions
应考虑全量合并(full compaction)(#55630, #55710)[fix](warmup)
修复CloudTablet::complete_rowset_segment_warmup
导致的崩溃问题(#55932)
数据库操作
[fix](database)
修复重命名数据库与创建表之间的竞态条件(#55054, #55991)[fix](create table)
并发重命名数据库会导致建表及重放失败(#54614, #56039)[fix](table)
将删除 editlog 操作移至表锁内执行(#55705, #55947)[fix](schema change)
启用轻量级 Schema Change 后,Tablet 列未被重建(#55909, #55939)
数据类型与序列化
[fix](variant)
修复将空值序列化为 JSON 字符串时的处理逻辑(#55876, #56138)[fix](variant)
修复稀疏列为空时的兼容性错误(#55817)[fix](variant)
增强 Variant 类型的max_sparse_column_statistics_size
配置(#55124, #55752)
外部数据源
[fix](paimon)
修复 Paimon 原生读取器未使用延迟物化(late materialization)的问题(#55894, #55917)[fix](paimon)
通过在缓存键中加入dlf.catalog.id
修复 Paimon DLF Catalog 缓存问题(#55875, #55888)[fix](paimon)
修复 Paimon 到 Doris 类型映射中 CHAR/VARCHAR 字段过大的处理问题(#55051, #55531)[fix](maxcompute)
修复在下推 MaxCompute 谓词时因表列不存在而抛出 NereidsException 的问题(#55635, #55746)[fix](maxcompute)
修复国际用户无法访问 MaxCompute Catalog 的问题(#55256, #55560)[fix](hudi)
修复查询仅需分区列(无数据字段)的 Hudi JNI 表时的问题(#55466, #55662)[fix](hive)
修复查询NULL DEFINED AS ''
的 Hive Text 表时的问题(#55626, #55661)[fix](iceberg)
为元数据扫描器补充缺失的iceberg-aws
依赖(#55741, #55743)[fix](iceberg rest)
使用 Iceberg 默认值刷新 OAuth2 Token(#55578, #55624)
内存与资源管理
[fix](memtracker)
内存未被 MemTracker 正确追踪的问题(#55796, #55823)[fix](mow)
修复BaseTablet::get_rowset_by_ids()
中 MOW 导致的崩溃(#55539, #55601)[fix](mow)
修复 MOW 聚合缓存版本检查问题(#55330, #55475)[fix](move-memtable)
修复因错误跳过段而引起的段数量不匹配问题(#55092, #55471)[fix](filecache)
云模式下段缓存不再限制文件描述符数量(#55610, #55638)
安全与加密
其他修复
[fix](mtmv)
修复当分区表没有分区时 MTMV 无法刷新的问题(#55468, #56085)[fix](plugin)
修复插件目录的兼容性问题(#56060)[fix](http stream)
HTTP 流式接口在 SQL 解析失败时应抛出异常(#55863, #55891)[fix](backup)
支持备份元数据/作业信息超过 2GB(#55608, #55867)[fix](mysql protocol)
转发到 Master 时正确设置更多语句存在标志(#55711, #55871)[fix](connection)
修复因超时断开连接时未清理会话相关数据的问题(#55008, #55809, #55396)[fix](wal)
执行失败时重放 WAL 中止事务失败的问题(#55881, #55924)[fix](restore)
清理已恢复的表/分区/资源以降低开销(#55757, #55784)[fix](index)
移除未使用的更新索引(#55514, #55704)[fix](txn lazy commit)
修复事务延迟提交与 Schema Change 冲突的问题(#55349, #55701)[fix](qe)
修复 SSL 模式下的查询错误(#53134, #55628)[fix](catalog)
使用位与操作替代Math.abs
以确保生成非负 ID(#55183, #55689)[fix](function)
修复array_agg_foreach
函数结果错误的问题(#55075, #55420)
基础设施与开发
构建与依赖
[chore](build)
优化构建脚本(#56027, #56028)[chore](thirdparty)
将 aws-sdk-cpp 从 1.11.119 升级至 1.11.219(#54780, #54971)[chore](build)
更新带 OpenSSL 的 libevent 依赖(#54652, #54857)[chore](config)
添加brpc::usercode_in_pthread
配置以支持 ASAN(#54656, #54829)
测试与质量
[chore](case)
修复若干失败的测试用例(#56140, #56167)[fix](case)
修复若干失败的测试用例(#56019, #56035)[fix](test)
修改回归测试以提高稳定性并调整预期日志级别(#55169, #55898)[fix](case)
修复若干失败的测试用例(#55739, #55769)[fix](case)
修复回归测试用例:cse.groovy(#53434, #55897)[fix](cases)
修复test_hudi_snapshot
测试失败问题(#55761, #55791)[fix](case)
修复若干失败的测试用例(#55811, #55835)[fix](case)
等待 MV 任务时应只关注最新任务(#55802, #55830)[fix](case)
修复 Variant 构建索引的测试用例(#55613, #55648)[Fix](case)
修复 show data p2 测试用例(#55449, #55494)[fix](test)
修复异步物化视图的show create table
显示失败问题(#55278, #55480)[fix](test)
在云模式下跳过部分测试(#55448, #55535)[Fix](case)
修复若干测试用例(#55606, #55656)[test](export)
为包含表达式的导出用例增加并行度测试(#55636, #55659)[test](iceberg)
新增 Polaris 测试(#55484, #55557)[test](nereids)
为 SQL 缓存/有序分区缓存增加单元测试(#55520, #55536)[test](docker)
适配 HMS 和 GCS 上的 Paimon(#55473, #55512)[test](warmup)
修复不稳定的周期性预热测试用例(#55365, #55453)
安全与配置
[chore](sk)
对日志中的secret key
进行加密,并隐藏access key
(#55241, #55619)[chore](security)
user_files_secure_path
配置项运行时不可更改(#55395, #55504)[chore](tablet)
ignore_load_tablet_failure
默认值设为 true(#55109, #55441)
云基础设施
[chore](cloud)
更新构建和启动脚本(#56031, #56064)[chore](cloud)
支持在事务提交时上报冲突范围(#55340, #55714)[chore](recycler)
改进回收器(recycler)指标(#55455, #55479)[chore](logs)
打印导出任务拆分 Tablet ID 的日志(#55170, #55646)
第三方与补丁
[thirdparty](patch)
BRPC 强制所有连接使用 SSL(#55658, #55696)[thirdparty](patch)
修复启用 SSL 时 BRPC 崩溃的问题(#55649, #55695)[fix](docker)
将 Kafka Docker 镜像更新为内部源(#55460, #55487)
CI 与性能
[ci](perf)
更新目标分支的 Docker 镜像引用(#55511)
行为变更
配置变更
[opt](hive)
hive.recursive_directories
默认值变更为true
[chore](tablet)
ignore_load_tablet_failure
默认值变更为true
[chore](security)
user_files_secure_path
配置项运行时不可再修改
安全增强
[chore](sk)
为提升安全性,日志中 secret key 现已加密,access key 已隐藏
兼容性说明
- 本版本与 Apache Doris 3.1.0 保持向后兼容
- 云恢复功能现已支持从 Doris 2.1 版本迁移至 3.1 版本
- 增强了 time 与 datetime 类型之间的类型转换支持