StarRocks 版本 4.1
危险
容器镜像问题(v4.1.0)
由于 v4.1.0 容器镜像中存在不稳定的加载顺序问题,BE 进程在容器环境中可能无法可靠启动。**容器环境用户请勿升级至 v4.1.0。**请等待 v4.1.1,该版本包含修复(#71825)。
warning
降级说明
-
将 StarRocks 升级至 v4.1 后,请勿降级至任何低于 v4.0.6 的 v4.0 版本。
由于 v4.1 中引入的数据布局内部变更(与 tablet 拆分和分布机制相关),升级至 v4.1 的集群可能会生成与早期版本不完全兼容的元数据和存储结构。因此,从 v4.1 降级仅支持降至 v4.0.6 或更高版本,不支持降级至 v4.0.6 之前的版本。此限制源于早期版本在解析 tablet 布局和分布元数据时的向后兼容性约束。
4.1.5
发布日期:2026 年 9 月 8 日
改进
- 支持对外部表执行
ANALYZE SAMPLE TABLE PREDICATE COLUMNS。 #77243 - 扩展基于采样的 Tablet 预拆分功能:支持非 Key 表达式、动态覆盖临时分区,以及 Iceberg 和覆盖式导入。 #77843 #77842 #77983
- 流式读取 Lake 列更新所需的 Segment,以降低内存使用量。 #77275
- Paimon Catalog 的后台元数据刷新现在仅刷新最近访问过且发生变更的表,而不再在每个周期枚举整个 Warehouse。 #78057
- 在分区裁剪期间将
limit传递给 PaimongetRemoteFiles调用。 #76943 - 扩展 GROUPING SETS 下推,支持
AVG和COUNT。 #77832 - 支持将
EXPLAIN COSTS输出包含在查询 Profile 中。 #73005 - 支持在运行时配置 starlet 对象存储上传阈值。 #78448
- 降低锁竞争:移除 Lake Segment 的全局 metacache 锁,并使 SQL 黑名单验证无锁化。 #78260 #78476
- 在 Compaction 和 Replication 归档期间删除
delete_predicate,以回收 Tablet 元数据。 #76870 - 使用 CRC32C 对 存算分离 delete 文件进行校验。 #77798
- 限制已取消查询等待未上报实例的时间。 #76909
- 对 jemalloc 进行了多项改进,以提升内存效率和可观测性:在 arm64 上同时构建 4K page 版本和 64K page 版本,暴露 dirty/muzzy page 以及 mapped/retained 指标,并支持在运行时应用可变的
jemalloc_conf选项。 #77886 #78159 #78225 #78320 #78333 - 增强可观测性:在 Leader FE 上新增
max_journal_replay_laggauge,并增加 Lake publish-version tracing。 #78382 #76658 #77048 - Reshard 作业完成后释放输出 shard 的 placement pin。 #76945
- 将 StarOS 升级至 v4.1.2。 #77657
安全
- [CVE-2025-55163] 通过
grpc-bom统一所有io.grpcartifact 的版本,使grpc-netty与grpc-core保持一致。 #77171 - [CVE-2026-59902] 将 Netty 升级至 4.1.137.Final。 #78287
- [CVE-2026-54399] 将 Apache HttpCore 升级至 5.4.3,以修复 HTTP/1.1 消息解析器中的不受控资源消耗(DoS)漏洞。 #77753
- [CVE-2025-48924] 将 Broker 的
commons-lang3升级至 3.20.0,并移除未使用的commons-lang2.6 和commons-configuration1.6。 #77748 - [CVE] 在较新的版本中重新构建 pprof binary,并从 BE 容器镜像中移除未使用的 flamegraph 工具。 #77846
Bug 修复
以下问题已修复:
崩溃与稳定性
- 当 fatal-signal handler 在将进程标记为正在崩溃后发生卡顿时, 强制 BE 退出。 #76491
- 修复
tokenize、ngram_search、generate_series、corr/covar_pop/covar_samp、strpos(INT32_MIN)以及对 decimal 数组执行count()时因常量参数或无效参数导致 BE 崩溃的问题。 #77102 #77103 #77216 #77260 #77092 - 修复一次
ALTER同时添加普通列和生成列时 BE 崩溃,以及 read-schema 重排后 cache-select 崩溃的问题。 #77436 #77245 - 修复查询缓存为分区 Hash Join 复用 lane 时 BE 崩溃,以及 lane 的 Join build side 为空时发生卡顿的问题。 #77564 #77571
- 修复
JsonColumnappend 时越界读取和静默丢行、BinaryColumnBase::replicate中整数溢出,以及将同一个 array 列作为多个 lambda 参数传入时array_mapDCHECK 失败的问题。 #77090 #77545 #77433 - 修复无效 UTF-8 输入下
substr返回相邻行字节,以及array_sort的 lambda comparator 导致排序越界的问题。 #78722 #77687 - 将 parquet decoder 的 scratch buffer 移出栈,并限制
SimdJsonConverter错误路径中的 raw-JSON view。 #77615 - 修复 tablet scheduler 在未上报存储介质的磁盘上发生 NPE,以及对
INSERT ... VALUES (DEFAULT, ...)进行 deparse 时和 optimizer 没有 query ID 时PrepareCollectMetaTask发生 NPE 的问题。 #76966 #76963 #77051
查询引擎与优化器
- 修复多个优化器路径中的错误或缺失结果:streaming distinct global limit、跨 sort group 的 ranking window pre-agg、merge 阶段重新追加常量聚合值、GROUP BY 规则未应用于每个 child,以及从 FOLLOWING offset 开始的 analytic frame。 #77086 #77068 #77069 #77099 #77342
- 修复 NL Join 的 null-aware anti join 丢失 probe 行、NL Join probe 对空 chunk 执行 conjunct evaluation,以及 GROUPING SETS 聚合按 group-by key 进行 Join 时无法生成可执行计划的问题。 #77970 #77344 #77296
- 修复 grouping-sets-to-union-all 改写顺序、作为 set operator 时重复复制 limit,以及将 Set operator 保持在 colocate exec group 之外以避免卡顿的问题。 #77380 #77692 #77025
- 修复 window 的
PARTITION BY/ORDER BY中的子查询规划、为多列count(distinct)构建的if()保持 decimal 类型,以及 将 scan heavy-expr result column 规范化为 slot 的 nullability 的问题。 #77087 #77346 #77242 - 修复无类型 array literal 获得错误类型从而破坏 view、达到 force-inline limit 时的 CTE anchoring 问题,以及 recursive CTE 重用推断出的 CTAS column 的问题。 #76986 #77018 #76453
- 通过将 scan schema、join predicate common sub-expression 和 ANN search spec 添加到 query cache digest,并在
SortNode构建 TOPN filter 时禁用缓存,修复多个 query cache 正确性问题。 #77559 #77565 #77586 #77404 - 修复从始终未覆盖 visible version 的 row count 中折叠
COUNT(*)、join reorder 中无条件收集 UKFK constraint,以及 inverted-index filtering 后仍保留 OR-resident predicate 所读取列的问题。 #77190 #77197 #77659 - 修复 datetime parsing 正确性:限制 Teradata 和 Joda parser 的解析范围不超过输入字符串,并确保对于超出范围的 Julian value,
DateValue::weekday()仍处于有效范围内。 #77098 #77310 - 当 batch buffer 可能过大时按行序列化
EXCEPT/INTERSECTkey,并在 set operation 对 key 进行反序列化时重新构建 JSON key column。 #77821 #77215 - 修复其他优化器/表达式问题:在 unwrap
StatusOr前检查 status;强制满足 property 时只进行一次判断;在encode_fingerprint_sha256中从 index 0 读取常量参数;对于非正 column length 跳过CHARpredicate 的零填充;不将非正 ranking predicate 下推到 TopN;使用推导出的 partition predicate 进行 pruning 时保留 NULL partition;在_switch_context中停止读取 output schema 末尾之外的内容;使用相同的 NULL 规则对 run 进行排序和合并;在 prepare 可能失败之前填充Analytor::_fns;不再强制 external CTAS list partition column 为NOT NULL。 #77052 #77091 #77104 #77444 #77445 #77596 #77660 #77679 #77758 #78468 - 修复 statement/deparse 问题:验证带 column list 的 Iceberg/Hive
INSERT的 static partition clause;deparse partition reference 时保留TEMPORARY修饰符;支持 CTAS deparse 以修复 profile 中出现空 SQL statement 的问题;在proxyExecute中设置isSingleStmt,使 forwarded statement 保留原始 SQL。 #76659 #76987 #77978 #77982
JSON 和数据类型
- 修复大型
BinaryColumnSerDe 问题、包含点号的列名的统计信息收集问题,以及将multi_unnest/unnest的 array offset 读取为uint32而非int32的问题。 #75504 #71301 #78479 #78480 - 降低 Flat JSON vertical compaction 的内存使用量,并修复 struct-subfield predicate 通过 rowid 进行评估时读取值本身的问题。 #77682 #77891
物化视图
- 修复使用外部授权时的 IVM refresh、MV rewrite 的 staleness baseline(现在使用 last-freshness-confirmed time),以及对 time-travel query 跳过 MV rewrite 的问题。 #77210 #76758 #77683
- 修复为物化视图上创建的 GIN index 分配 index ID,以及在基于 view 的 MV rewrite 中替换 view 后保留 view scan projection 的问题。 #77340 #77613
- 修复其他物化视图问题:验证
default_mv_refresh_mode;修复 incremental MV 上的ORDER BY错误扩展 primary key 而不是执行排序的问题;以及使用query_timeout限制information_schema.materialized_views的内部查询。 #77231 #77680 #77585
Data Lake Connector(Iceberg、Paimon、Delta、Hive)
- 修复 Iceberg 的正确性和稳定性问题:在 write path 上强制 NOT NULL 列;根据 plan-time snapshot 验证 rewrite commit;在
TRUNCATE后使 metadata cache 失效;删除 metadata file 缺失的表;在 cast-on-string-partition metadata delete 前刷新 native table;修复带WHERE子句的rewrite_data_files中的静默数据丢失问题;以及修复remove_orphan_files的 retention window 过短问题。 #77589 #77709 #77385 #77786 #77335 #77797 #77394 - 隔离 Delta Lake 各表的云凭证。 #77424
- 支持 Hive 外部表的 OpenX JsonSerDe 列名映射、将一个 JSON 字段映射到多个 Hive 列,并修复在缺少 default catalog 和存在 CTE 引用时 connector view 中的 table qualification 问题。 #65515 #77716 #77887
- 修复外部表的 Ranger view/MV authorization,并恢复 FE classpath 中的 Ranger Solr audit destination。 #56316 #77294
- 修复返回损坏的
DELTA_BINARY_PACKEDheader 而不是抛出异常的问题,以及 Parquet reader 未将被 filter 排除的 FLBA dictionary row 标记为 NULL 的问题。 #77446 #78685 - 修复 Iceberg REST catalog 上
ALTER TABLE RENAME的 NPE、读取包含 decimal 或 nulltimestamptzpartition value 的 Iceberg$partitions时的 NPE、多个 Iceberg catalog 共享 HadoopFileSystem,以及paimon.option.cache-enabled=false再次失效的问题。 #76498 #77742 #77297 #78271
存算分离:Compaction、Vacuum、Reshard 和 Replication
- 修复 Compaction 问题:缓存 file bundling 跳过的 compaction txn log;按照 max tablet score 对候选项排序;修复 read-chunk-size 估算;修复 Limiter 缩小时丢失 token 的问题;以及跳过 delete-only write 的 publish-time segment rewrite。 #77578 #77482 #78192 #78087 #78071
- 修复 Vacuum 问题:修复 grace-blocked vacuum 中的无效读取和多余 v1 delete;使 autovacuum retain floor 保持不低于 reshard takeover;并避免冗余的 lake metadata 404 probe。 #78460 #78545 #78466
- 修复 Reshard/Split 问题:拒绝 source tablet 位于 superseded materialized index 中的 reshard;修复 tablet split fallback cross-publish;静默预期的 reshard history lookup warning;并防止 failover 后 lake alter job 卡住。 #77512 #78270 #78059 #78517
- 修复 Replication 问题:保留 shared lake files,读取 remote bundled lake metadata,并在 Replication 期间重新加密 source lake files。 #77361 #77362 #78080
- 修复损坏的本地缓存:delvec page 校验和失败时删除并重试;PK-index SST compaction 和 tablet-merge SSTable rebuild 发生损坏时重新构建。 #78086 #77481 #78003
- 修复从 partition-shared object 读取 lake version-1 metadata、保护 snapshot 所拥有的 shared shard group,以及在
TransactionGraph.remove中保持 dependency ordering 的问题。 #78731 #78800 #78077 - 修复其他 存算分离 问题:在 final commit 阶段限制 transaction;不将
DECOMMISSIONreplica 选为 load primary;修复 online optimize 期间包含 shadow generated column 的 DML;使spill_enable_direct_io实际使用O_DIRECT;修复并发BEGIN WITH LABEL之间的 label uniqueness race;从 effective query memory limit 推导 query tracker reserve limit;在 tablet merge 期间安全地重新映射 rowset ID 和引用;仅将 cross-published del file 应用于 child 所拥有的 key;使 tablet merge 遵循 range-distribution colocate;拒绝不完整的 combined txn log,并防止replication_num弱化 存算分离 write quorum;在 Reshard 期间将 explicit transaction 保持在同一 tablet layout 上;del file 校验和失败时删除其本地缓存并重试;以及在 closed lake delta writer 拒绝 task 时报告 abort reason。 #77015 #77035 #77252 #77255 #77401 #77408 #77690 #77744 #78113 #78162 #78625 #78022 #78632 - 修复 存算分离 sort key 和 rowset identity 的边界问题:在添加尾部 key column 后将 split boundary 投影到当前 sort key;使 recursive CTE 执行期间的内部
INSERT失败能够被报告;不再通过 apportioned row count 判断 cross-published rowset 是否存在;使窄固定长度 IVM row ID 能够访问encode_sort_key并展开其常量参数;通过 root column 解析 extended column 的 delta column group;保留 range-split cross-publish statistics;修复 FE max tablet compaction score collection;删除 auto-increment map 时跳过 dead node;测量 unsorted PK SST writer 的 map 而不是统计 allocation 数量;将compression_level传递至 synthetic sub-column meta;并在 builtin inverted-index backend 中跳过 standalone GIN index directory handling。 #77504 #77510 #77511 #77751 #77847 #77759 #78269 #78496 #78561 #77498 #76949 #77101
数据加载、事务和 DML
- 修复 data-load 和 column-mode partial-update path 中对 chunk capacity 的限制和检查、按 owning child 决定 condition update 和 partial update,以及按 statement 记录 merged rowset 的 del
op_offset的问题。 #77163 #78099 #78313 - 修复 dropped table 的 insert-overwrite failure 未记录到 journal,以及多个 partial-update path 中 current row lifecycle 未正确保持的问题。 #77212
- 修复将 disconnect kill 交给 I/O thread 而不是 worker,以及
GroupedExecutionSinkOperator::push_chunk未传递accept()status 的问题。 #77590 #77737 - 使仅记录 error state 的内部 DML/CONTROL statement 失败,从而使 failure 能够被报告,而不是被静默吞掉。 #77388
统计信息、指标和 FE/元数据
- 修复统计信息正确性问题:拒绝 histogram 中的 null bucket/MCV,并使
CancelableAnalyzeTask.cancel只选择一个 winner。 #77024 #78593 - 注册
pipe_driver_queue_lenmetric;增加用于 NotFound lake tablet metadata read 的 BE metric;跳过非 table StarOS shard 的 table metrics 和 checkpoint thread-pool metrics;并修复 profile dictionary 中拼写错误的ZoneMapIndexFilterkey。 #77890 #78451 #78116 #77367 #78728 - 修复 FE/metadata 问题:meta sync 时忽略 recycled missing shard group;恢复 bRPC 中每个 endpoint 的多个 connection group;在 FE 中解析 compute-node hostname 后再发送至 BE;在
DROP FOLLOWER/OBSERVER后使被删除的 FE 自行退出;并暴露 colocate group scheduling sample knobs。 #76604 #76765 #78390 #78215 #78450 - 修复扩展 meta-scan tablet 时跳过 non-extended access path、按 column ID 匹配 scan 的 access path、仅在 BE 对 OLAP scan 执行 pruning 时缩小其 complex type,以及不对 aggregate-state column 的 subfield 执行 pruning 的问题。 #76593 #77987 #77894 #77901
- 不再对 aggregate-state column 使用 global dictionary,也不再对返回
ARRAY/STRUCT的表达式进行 dictionarize;当下推 predicate 读取 sparse range 时,按 ordinal 索引 index page null flag。 #77096 #78488 - 修复其他 metrics 和 FE 问题:将 bRPC method error bvar 作为 counter 报告;将实际 tablet count 报告为 range-distribution partition 的 Buckets;修复
show proc '/global_current_queries'中的 NPE;在 intermediate query statistics 中报告 data cache read statistics;在 jemallocmalloc_usable_size中使用最小化的 TSD fetch;停止 heap-profile toggle 向prof.thread_active_init写入;防止 FE connection ID wrap 后发生 collision;修复大量 partition 过期时 table stats health 固定在约 1.0 的问题;使用feature_log_dir作为 FE features-log path;复制 logical window operator 时保留inputIsBinary;以及修复 cache invalidation 后的 Thrift client leak。 #76956 #77465 #77407 #77696 #77625 #78384 #78217 #76927 #77221 #77058 #77072
其他
- 为 pooled Poco session 应用 request timeout;将 Linux AArch64 上的 Hyperscan 升级至 Vectorscan 5.4.12;提升
JAVA_OPTS_FOR_JDK_*warning 的级别;并停止在 java-extensions reader libs 中发布 test-scope jar。 #78361 #78326 #78328 #77752 - 按 key size 序列化
dictionary_getkey;捕获 thrift processor 中的异常;并使 CTAS 的files()schema inference 不受 planner meta lock 影响。 #78706 #78805 #78772 - 当文件没有末尾换行符时读取最后一行 conf;根据 cwd 解析 config YAML path;将 GCS upload-threshold BE config 命名为
gcs而非gs;将 StarOS 和 Starlet 升级至 4.1.3;并移除过时的 config forward-header split 和文档文件名中的多余 U+200E。 #78065 #77132 #78452 #78038 #78780 #78612
4.1.4
发布日期:2026 年 8 月 5 日
行为变更
- 在存算分离模式下,
TABLESAMPLE/SAMPLE子句和ANALYZE SAMPLE TABLE现在会在 Lake 表上生效。此前采样选项从未传递到 BE,因此仍执行全表扫描。#71874 ALTER TABLE对flat_json配置的修改现在通过版本化任务传播到 BE 节点,以确 保可靠生效。#74747- 由 GIN 倒排索引响应的
NOT MATCH谓词不再返回 NULL 行;NULL 行现在被正确排除在结果之外。#75578 ANALYZE ... UPDATE HISTOGRAM ON不再为 char 系列列计算直方图(优化器并不使用),而仅计算 MCV,降低了 analyze 开销。#75968rewrite_manifests现在按保序的分区范围对输出 manifest 进行聚簇,在分区较多的表上产生更紧凑的单 manifest 分区边界,改善 manifest 裁剪。#76193- 多表 stream load 现在会根据每张表的
file_bundling属性来决定是否使用合并事务日志,而不再仅遵循全局lake_use_combined_txn_log配置。#76806 - 在 Primary Key 表上,GIN 倒排索引与列模式部分更新组合使用时不再返回损坏的结果;索引现在从 delta column group segment 提供服务。#76271
array_difference对整型数组现在先以 64 位计算相邻差值再扩宽为BIGINT,修复了 int32 溢出。#76569- 除数为非常量的除法表达式不再被视为单调,修 复了可能导致错误结果的 ZoneMap 裁剪。#76744
- 当一个 chunk 展平后的结果超过 4 GB 时,数组和 Map 构造器现在会报错,而不是静默损坏数据。#76419
- Primary Key 插入现在会正确拒绝在 L1/L2 持久化索引中已存在的键;此前该存在性检查被跳过。#76591
- range-colocate 表上的基于采样的 Tablet 预分裂现在会将新分片分散到多个计算节点,而不是打包到源 Tablet 所在节点,修复了 range 批量导入比 hash 慢约 3 倍的问题。#76608
- 增量或 AUTO 物化视图现在会在
AUTO刷新模式下为 PCT 回退重建维护查询,修复了 IVM 不支持的形状导致的刷新失败。#75961 ALTER MATERIALIZED VIEW ... ACTIVE现在对非聚合的 INCREMENTAL 物化视图可用;存储填充的__ROW_ID__列被排除在 MV DDL 列列表之外,使失活的 IVM 可以重新激活。#77017- Iceberg 分区缓存现在按内存(而非仅按条目数)进行限制并暴露其使用量,防止在分区很多的表上无限增长。#76165
- 使用 OAuth2 客户端凭证的 Iceberg REST Catalog 现在会在后台 token 刷新任务失效后自愈,而不是使后续所有请求失败。#76457
- Lake 全量 Vacuum 现在会回收此前被跳过的孤立
.lcrm(Lake Compaction Rows Mapper)文件。#76522 - 存算分离 publish 现在会拒绝写入缺失 tablet 的 bundle tablet 元数据文件,防止分区在 publish 时被永久卡住。#76850
- 被丢弃的外部(Spark/Flink connector)扫描上下文在被回收时现在会取消其 pipeline fragment,且外部扫描计划会设置
query_delivery_timeout以限制 QueryContext 的生命周期。#76535 #76536 - 物化视图的 pinned-range map 现在按表 UUID 正确加键,修复了 OLAP 表的 MV bootstrap pinning 被禁用,以及不同数据库中同名表被错误处理的问题。#76320 #76351
- 转发到 Leader FE 的语句,其审计日志现在记录完全限定的查询关系(与 Leader 一致),而不是 CTE 别名和非限定表名。#76387
- 将完整
STRUCT列与ROLLUP、CUBE或GROUPING SETS一起聚合时,不再在计划阶段报usedStructFiledPos错误。#76804 - FE 内存
Estimator现在会计入容器开销,且 Parquet Scanner 现在使用有界的 chunk 大小(而非整个 batch 大小)为缺失列填充 NULL,提升了内存核算的准确性。#75971 #75981
改进
- Routine Load 新增对
INCLUDE METADATA子句的支持,可暴露 Kafka/Pulsar 消息元数据(如 partition、offset、timestamp)。#73840 - 使 Routine Load 的元数据别名可选。#76294
- 为
information_schema.materialized_views新增LAST_FRESHNESS_CONFIRMED_AT列。#74585 - 通过
/metrics端点暴露 Data Cache 指标,并新增 FE Compaction 指标、ALTER TABLE列操作指标及耗时,以及 exchange sink 的CompressedInputBytes指标。#58204 #72941 #76247 #76309 - 向最终用户暴露 connector 元数据操作的认证与连通性错误详情。#75490
- 改进大列容量限制检查的错误信息。#76303
- 新增
hdfs_backend_selector_cache_replica_num变量,并使对象存储客户端缓存大小可在运行时修改。#75023 #75851 - 将基于采样的 Tablet 预分裂 meta-tier 读取器扩展到更多排序键类型,包括
CHAR、复合排序键,以及 UTC 校准的 ParquetTIMESTAMP/ ORCTIMESTAMP_INSTANT。#75937 #76011 #76114 - 改进外部表统计信息采集:现在会跟踪谓词列使用情况、在单次扫描中采集多列,并对 Iceberg 表应用有界成本的扫描预算。#75938 #76638 #76549
- 支持 right-outer、semi、anti 和 full-outer 的 range-colocate join。#76040
- 优化 Query Queue V2 的成本估算器。#76609
- 为
FILES()glob 将通配符字面量前缀下推到 S3ListObjectsV2调用,减少列举的对象数量。#76210 - 在
remove_orphan_files中扫描 Iceberg manifest 条目时,现在仅投影file_path列。#76020 - 支持 Lake Primary Key tablet 的 base compaction,以及分离排序键的云原生 PK 表的 load spill 与 eager PK-index SST。#76794 #76094
- 支持在存算分离 range-distribution 表上仅通过元数据方式添加末尾排序键列。#76341
- 在 fragment 取消时取消进行中的 exchange sink RPC,并在 reshard 清理期间取消已重分片分区上进行中的 compaction。#75613 #76759
- 多语句 stream load 通道现在会在等待前先触发,降低导入延迟。#76715
- 为
Analytor::process中的列升级新增内存限制检查。#75821 - 在异步 delta writer 被停止时保留真实的错误状态。#76216
- 在 Lake PK-index SSTable 上记录 generation 版本,在 Lake Primary Key publish 时应用
op_write.seg_delvecs,并在 compaction publish 冲突解析时跳过打开输出 segment footer。#76208 #76474 #76657 - 为 Lake load 和 publish-version 路径新增堆栈跟踪和细粒度 trace counter 以辅助诊断。#75901 #76810
安全
- [CVE-2026-44891] 将 Netty 升级至 4.1.136.Final,修复 STOMP subframe 解码器中的内存耗尽(DoS)漏洞。#76555
- [CVE-2026-55971] [CVE-2026-43871] 将 Apache Thrift 升级至 0.24.0,修复 C++ 绑定中的堆缓冲区溢出以及一个无限循环漏洞。#76922
- [CVE-2026-10050] 排除存在漏洞的 Jetty jar(经 Hadoop 传递引入的客户端 Digest 认证绕过),并将 pgjdbc 升级至 42.7.12。#76783
- [CVE-2011-4969] [CVE-2014-6071] 排除捆绑了存在漏洞的 jQuery 1.4.2(及其他 jQuery XSS CVE)的未使用的
avro-ipcjar。#76270 - [CVE-2024-29857] 移除与其已修复版本一同随包发布的存在漏洞的过时传递依赖(例如
bcprov-jdk15on1.70 和 EOL 的okhttp2.x),并新增依赖禁令以防回退。#76097
Bug 修复
修复了如下问题:
- join 谓词推导中空 range 导致的 Planner 崩溃。#75011
- 聚合被错误地下推到带非空常量
ELSE的CASE之上。#75037 PARTITION-TOP-N的 partition-by 被改写为已裁剪的字典 slot。#75956- join shuffle-join 输出属性分支中的运算符优先级错误,以及
predicateCommonOperators未在 join 运算符构造过程中传递。#76203 #76330 #76388 - 视图列以及
ROLLUP键在分析阶段的可空性错误。#75684 #76149 regexp_extract_all在零长度捕获组上的无限循环。#75798LargeOrCalculatingVisitor中nullsFraction的错误 clamp。#75864- string 到 number 的 schema-change 转换中
CAST语义错误。#75538 - 同步 MV 改写在同列
min/max情况下丢失一个 rollup 列。#75528 - 在上拉扫描谓词时错误地在
array_maplambda 内部进行改写。#76380 - bucket-aware 执行下 Iceberg bucket 表上的
COUNT(DISTINCT)多计。#76601 - 对必填 Iceberg 列进行
UNNEST+GROUP BY时的可空输出错误。#76730 - 降低
INSERT OVERWRITE代码路径上的锁争用,并恢复Operatorsalt 以避免 CBO table prune 中的 Memo 自引用。#75828 #76542 - 当字符串日期分区列与时间值比较时,Iceberg 分区裁剪、manifest 行数估算、元数据删除、等值删除应用以及 Delta Lake 分区裁剪均存在错误。#76068 #76107 #76197 #76280 #76348
- Iceberg 读取未遵循目标快照的 schema 和分区规格;删除分区字 段后查询 Iceberg V1 表失败;以及
rollback_to_snapshot后 MV 改写返回过期结果。#74711 #75149 #75924 - Iceberg manifest data-file 缓存提供了不完整的文件集;增量 scan-range 迭代器并发关闭不安全;分析阶段的时间旅行快照绑定现在改为尽力而为。#76215 #75953 #76448
- Iceberg/Delta 从元数据推导的统计信息现在标记为
StatsSource=TABLE_METADATA。#76560 - Delta Lake 和 Kudu 未分区物化视图的查询改写。#76359
- 由于
gcs-connector3.x 配置项重命名导致 GCS vended 凭证被忽略。#75979 - Hive
getTable()现在会在get_table_req回退前重连,并按异常类型(而非消息文本)判断表不存在。#76456 #76459 - Parquet column-index 统计不支持
BOOLEAN的 min/max。#74752 - 名称含
.的键的 flat-JSON 子字段读取,以及重建中间 flat-JSON 对象而非返回 NULL;当子字段键在不区分大小写时冲突,现在会跳过 JSON 子字段下推。#75583 #75764 #76594 - 当仅一个分支具有 bitmap 索引时保留 OR 嵌套谓词。#76275
- Primary Key 自增列部分更新 apply 时的 BE 崩溃。#76119
- load spill 期间
LoadChunkSpiller初始化竞态导致的 BE 崩溃。#76098 - 原生 Parquet reader 在不完整的嵌套 lake schema 上的崩溃,以及 Avro 复杂类型列中嵌套
BOOLEAN的 ASAN 崩溃。#76455 #76041 - schema change 期间将无效字符串转换为
NOT NULL数值列时的bad_variant_access。#76707 SimdJsonConverter错误路径中的堆缓冲区溢出,以及跨缓冲区扩容的多字符 CSV 分隔符上的 use-after-free。#76752 #76718- 扫描销毁时
MorselQueueFactory上的 use-after-free、可溢出 join buildset_finishing在取消时的 use-after-free,以及PipelineDriver析构中的全局 Runtime Filter 定时器泄漏/未取消定时器。#76259 #76633 #76252 - 空值安全的
SparseRangeIterator::has_more(),修复物理分裂空 tablet 导致的 CN 崩溃,以及 bRPC stub 缓存清理定时器泄漏。#75985 #75973 - 在 query-deploy worker 上未恢复
ConnectContext。#76366 - 为存算分离 Primary Key 表保留事务内的 upsert/delete 顺序,包括使 spill merge 感知操作类型。#75338 #75366
- 在
cal_new_base_version中读取持久化元数据以避免悬挂的prev_garbage_version;在publish_version中保持base_version与base_metadata同步;并在常规路径上持久化合并后的并行 compaction 事务日志。#75904 #76313 #76460 - range-colocate 相关修复:停止对齐作业风暴并对未对齐的 colocate join 采用 fail-close,修复 bucket-shuffle 下 null-safe join 丢失匹配,以及改进 plan feedback 中的 range-colocate join 检测。#75930 #76104 #76121
- Tablet 分裂/重分片相关修复:分裂时提升表的乐观版本以便并发查询重新规划、在相同 tablet 重分片前 flush PK-index memtable、跨重分片按版本区间保留 Lake Vacuum 文件、在不可分裂的 range-distribution tablet 上停止自动分裂作业循环,以及修复分裂后 range-distributed 排序键上的
IS NULL裁剪。#76123 #76367 #76209 #76663 #76797 - 拒绝会重排 key 派生的 range-distribution 表的键列的全列
ORDER BY。#76256 - 按 flush 顺序合并 load-spill 并行 merge 结果,并在 file-bundling carry-forward 中按
metaId排除已触及的索引。#75951 #76368 - 为 NULL 吸收的 dict-mapping group-by 键预留字典大小 + 1,并在 profile-report 重新调度前检查 driver 就绪状态。#75357 #75725
PlannerMetaLocker在从未成功加锁时跳过解锁。#74041- 按 warehouse 过滤资源组。#73209
- 在
SHOW CREATE ROUTINE LOAD输出中转义jsonpaths值。#75755 - 修复 Arrow Flight 预处理语句转发。#76310
- 修复字典刷新间隔溢出和意外的自动刷新。#76634
- 修复
ERROR_IF_OVERFLOW下 min/max 为空时的统计信息缓存加载失败。#76684 - 使 Catalog 删除的存在性检查在写锁下原子化。#76778
4.1.3
发布日期:2026 年 7 月 14 日
行为变更
CTAS现在会保留显式声明的VARCHAR(N)列长度,而不是将其扩展为VARCHAR(MAX)。现有表不受影响;使用CTAS创建的新表将在后续写入时强制执行声明的长度。#73498- 在没有
OPERATE ON SYSTEM权限的情况下查询sys.fe_memory_usage或sys.fe_locks,现在会返回明确的拒绝访问错误,而不是误导性的节点查找失败。#73567 FILES()和 broker/stream load 不再对以isAdjustedToUTC=false写入的INT64Parquet 时间戳应用会话时区偏移;这些时间戳现在被视为挂钟时间值并按原样加载。在 v4.1.3 之前从此类文件加载的数据可能与升级后加载的数据不同;如需保持一致性,请重新加载。#73674- 成功提交的多表事务 stream load 作业现在在
information_schema.loads和SHOW STREAM LOAD中正确显示为VISIBLE,而不是停留在PREPARING状态。#74386 - Connector 增量扫描范围调度现在始终复用已部署 fragment 的 driver 布局,防止扫描范围被错误分配给不存在的 driver。#74674
LIKE常量折叠现在与 MySQL 8 的反斜杠转义语义保持一致,修正了诸如'a\\\\b'等模式之前返回相反结果的情况。#74814- Routine Load 现在支持
property.kafka_partition_discovery属性,该属性允许在指定kafka_partitions和kafka_offsets以设置精确起始偏移量时,分区自动发现仍可继续进行。当未设置property.kafka_default_offsets时,在作业已有消费进度后新发现分区的默认起始偏移量从OFFSET_END变更为OFFSET_BEGINNING——此变更适用于所有自动发现作业,而不仅限于使用新属性的作业。#74729 - 非 group-by 聚合现在在合并之前通过
UNION ALL分支下推,从而减少对 union 进行聚合查询时的网络传输和内存使用。#73930 - IVM 维护查询现在在每次刷新时从当前视图定义重新推导,而不是使用在
CREATE时存储的冻结查询文本;现有 MV 无需重新创建即可自动受益于重写器的错误修复。#74881 - 基于采样的 tablet 预拆分现在将预拆分分片分散到所有计算节点(
SPREAD放置策略),而不是将其集中到源 tablet 的 worker 上(PACK放置策略),从而提升加载并行度。#75514 - 仅更改列注释的
ALTER TABLE ... MODIFY COLUMN现在采用轻量级纯元数据路径,而不是启动完整的 schema 变更作业,并且此功能现在也适用于主键列。#75325 FLOOR和CEIL现在被视为非保留关键字,可以不加引号直接用作列名。#75241SHOW FUNCTIONS的输出现在始终在 UDF 和 UDAF 的 Properties 列中包含isolation属性(shared或isolated)。#75255lake_vacuum_min_batch_delete_size的默认值从 100 提升至 200,通过在每次DeleteObjects请求中批量处理更多过期文件删除操作,提高了对象存储上的 vacuum 吞吐量。#74304- 使用授权凭证的 Iceberg REST catalog 表现在会被缓存,其凭证在后台刷新,从而消除了每次
getTable()操作都调用GetDataAccess的情况,避免了 AWS Lake Formation 的速率限制。#75431 - IVM 的
bitmap_union、hll_union和percentile_union聚合状态现在在物化视图中只存储一次,而非两次(可见列 + 隐藏的__AGG_STATE_列),将这些 sketch 类型的存储空间减少了一半。#75760 - 增量物化视图现在支持
bitmap_agg、hll_union、percentile_union和bitmap_union聚合函数,使精确去重计数和基于 sketch 的聚合能够以增量方式维护。#75587 #75610 - 基于采样的 tablet 预分裂数量现在会向上取整至当前活跃计算节点数的最近整数倍,以实现均匀分布,并通过最小 tablet 大小下界进行约束,避免小数据量加载时产生过度碎片化。#75360 #75584
改进
ngram_search函数现在接受非常量的 needle 参数。#74675- 新增了由
enable_http_authFE 配置项控制的 HTTP 认证框架,对所有外部 HTTP 端点进行认证和 RBAC 权限管控。#73822 - 在
information_schema.materialized_views中新增了刷新和放置可观测性列(refresh_warehouse、refresh_resource_group、refresh_mode、refresh_type、last_refresh_details)。#74342 - 新增了在 journal 回放时对外部统计信息缓存进行按需懒加载刷新的选项,由新的 FE 配置项控制,以防止缓慢或卡死的外部元数据存储阻塞 FE journal 回放或启动。#74371
VARCHAR长度增加现在可通过快速 schema 演进在范围分布(共享数据)排序键列上执行,无需重写数据。#74698- 新增了当共享数据事务日志写入超过可配置阈值时的堆栈跟踪转储功能,使缓慢的
put_txn_log/put_combined_txn_log调用更易于诊断。#74704 - Tablet 预分裂元数据层 footer 读取器现在支持
DATE、DATETIME、DECIMAL、VARCHAR以及 ORCTIMESTAMP排序键,减少了必须回退到数据层采样的加载次数。#74710 #74739 #74792 #74902 #74955 #75186 #75209 #75427 #75697 - 基于样本的 tablet 预分裂现在适用于
INSERT INTO ... SELECT ... FROM <OLAP table>加载,以及包含所有排序键列的列列表INSERT语句。#74828 #75345 - 为共享数据 tablet 元数据和 事务日志文件添加了 Adler-32 校验和保护,使读取时能够检测到静默损坏。#74924
- 新增了每个数据库的
txn_max_committed_pending_publish_msFE 指标,报告最旧的已提交但尚未发布的事务的时间,以帮助检测版本发布停滞。#75025 - Tablet 分裂/合并现在从发布版本响应中实时触发,减少了加载完成与自动分裂/合并启动之间的延迟。#75010
- 通过将无 SST 条件合并任务路由到
pk_index_execution线程池,优化了湖仓主键表的条件更新比较阶段。#74572 - 将湖仓 schema 变更和 rollup 作业锁的范围从整个数据库缩小到表级别,减少了同一数据库中其他表并发操作时的锁竞争。#75087
- 在 存算一体 模式下,将多个数据库级写锁缩小为表级密集写锁,减少了 BE 报告回调和冷却操作期间的锁竞争。#74521 #74523
- Avro Routine Load 现在支持原生
MAP和STRUCT目标列。#74901 - Range-colocate tablet 稳定性门控现在在将组标记为稳定之前等待 StarOS 放置收敛,确保 colocate join 实现主机本地执行。#75290 #75656 #75883
- 改进了外部表的 CBO 统计信息:优化器现在无需完整文件枚举即可从 Iceberg manifest 估算行数,修正了 Parquet/ORC 压缩下 Hive/Hudi 行数低估问题,为 JDBC 连接器添加了异步行数统计,并在 Puffin 统计不可用时为 Iceberg 和外部连接器提供 NDV 估算回退。#75280 #75082 #75083 #75092 #75097 #75382 #75474
- Iceberg manifest 列统计信息现在仅针对聚簇列进行选择性缓存,减少了具有大量数据文件的宽表的 FE 堆内存消耗。#75395
- 外部表统计信息收集 现在支持跨 FE 重启和 HA 故障转移的持久化谓词列跟踪,使 auto-ANALYZE 能够针对正确的列。#75653
- 新增了结构化
[ExternalStats]日志行,涵盖外部表统计信息收集从调度到执行的完整生命周期。#75335 #75529 SHOW ANALYZE STATUS现在在外部表统计作业的 Properties 列中包含分区、列和快照元数据。#75630- 每个外部表的统计信息来源(
TABLE_METADATA、ANALYZE或NONE)现在在查询运行时 profile 中公开。#75253 - 新增对 Iceberg 和 Delta Lake 外部表的分区过滤要求和分区数量限制的支持(此前仅适用于 Hive、Hudi 和 Paimon)。#75790
- 在
TABLE SAMPLE和直方图ANALYZE中支持低于 1% 的采样比例,修复了在大表上计算比例截断为零导致的失败问题。#74551 - 新增
jemalloc_confBE 配置项,使 jemalloc 运行时选项可通过information_schema.be_configs查看。#75344 - 新增
compaction_chunk_reset_memory_tracker_threshold_percentBE 配置,通过释放保留的 chunk 容量,降低 存算一体 模式下主键压缩时的内存占用。#75091 - 将 staros 升级至 v4.1.1,包括重启后持久化
datacache.enable、每 worker 组分片预热超时覆盖,以及改进的 S3 重试抖动。#75204 - 通过在 SQL 字符串中不含凭据标记时跳过正则扫描,优化了审计热路径上的 SQL 凭据脱敏性能。#74812
- Parquet 扫描器的表达式驱动按需懒加载列功能,减少了多分支
OR查询中不必要的 I/O。#74886 ds_hll_count_distinct/DataSketchesHll现在通过使用复合估算器替代依赖顺序的 HIP 估算器,产生稳定的基数估计结果。#75053
安全
- [CVE-2026-45416] [CVE-2026-44249] [CVE-2026-45673] 将 Netty 升级至 4.1.135.Final,修复 SNI 处理器堆耗尽(DoS)、IPv6 子网过滤器绕过以及 DNS 缓存投毒问题。#74668
- [CVE-2026-54512] [CVE-2026-54513] 将
jackson-databind升级至 2.21.4,修复两个反序列化漏洞。#75373 - [GHSA-2r2c-cx56-8933] [GHSA-47qp-hqvx-6r3f] 从 Hadoop 传递依赖中排除
org.jline:jline-remote-telnet,以修复未经身份验证的 Telnet 服务器 DoS 漏洞。#75066 - [CVE-2026-39822] 更新 pprof 预构建文件,修复 pprof 二进制文件中的漏洞。#76248 #74669
- 修复了
information_schema.task_runs中的 SQL 注入问题,该问题导致谓词值中的单引号可能逃逸字面量边界。#75520 tencent.cos.access_key、tencent.cos.secret_key和iceberg.catalog.jdbc.password现在在SHOW CREATE CATALOG输出中被脱敏处理。#74696- 修复了
url_decode在输入以截断的百分号转义序列结尾时发生的越界读取问题。#75139 - 修复了
HyperLogLog::deserialize接受超出范围的SPARSE寄存器索引的问题,该问题可能在输入格式错误时导致堆内存损坏并使 BE 崩溃。#75521 - 修复了
bar()拒绝负宽度值的问题,此前该问题允许字符串无限增长并导致 BE 内存耗尽。#75143
Bug 修复
以下问题已修复:
add_files使用 Parquet 物理编码字节而非逻辑类型值填充 Iceberg 文件边界,导致文件级别的最小/最大值剪枝不正确(例如,在DECIMAL列上)。#69207ApplyTuningGuideRule在遍历输入列表以不可变List.of(...)构建的计划节点时抛出UnsupportedOperationException。#70785INSERT OVERWRITE两阶段重新规划可能从第一次规划会话中产生过时的 lambda 参数列引用 ID,导致expr_type does not match slot_type错误。#73273- 对带有 GIN(倒排)索引的表进行部分更新时,若更新中省略了 GIN 索引列,查询会无限期挂起或失败。#73773
- 当行集模式与 tablet 模式之间发生模式漂移时,Lake PCU(部分列更新)会崩溃或静默损坏数据。#74005
- 对外部 Iceberg 表执行包含多个模式子句的组合
ALTER TABLE时,每次子句分发都会错误地重新执行所有先前排队的操作。#74036 - 在分区刷新与资源组取消交错执行期间,当
num_rows快照超过实际 chunk 行数时,PartitionedSpillerWriter崩溃并抛出SIGSEGV。#74081 - BE 进程在启动期间(通常在部署后立即)可能意外退出,原因是 BE 信号初始化中未忽略 SIGPIPE。#74424
- 由于行范围过滤跳过了结构体 VARCHAR 子字段填充,Parquet 临时字典编码列泄漏到上层,导致类型不匹配。#74452
SELECT ... INTO OUTFILE在审计日志中记录了ReturnRows=0,而非实际导出的行数。#74467TabletChecker.doCheck()由于锁类型不匹配,在blockingAddTabletCtxToScheduler中抛出IllegalMonitorStateException,导致整个检查轮次静默中止。#74596information_schema.COLUMNS对DATETIME_PRECISION始终返回NULL,导致从该字段推导列大小 的 MySQL 协议客户端出现异常。#74623- 当查询跨不同数据库或目录连接两个具有相同非限定名称的表时,MV 刷新失败并报
Duplicate key。#74730 - 可溢出哈希连接探测在某些条件下崩溃。#74978 #75140
- 当宽度或桶数参数为零时,Iceberg
truncate和bucket转换函数导致 BE 崩溃并抛出SIGFPE。#74998 - 当被除数为
TYPE_MIN且除数为-1时,mod()和pmod()导致 BE 崩溃并抛出SIGFPE。#74980 - 当
bucket_num为零或负数时,histogram()导致 BE 崩溃并抛出SIGFPE。#75041 - 当所有输入行均为
NULL时,encode_fingerprint_sha256崩溃并抛出SIGSEGV。#75042 - 包含单字符通配符
_的LIKE模式在通过 GIN 倒排索引求值时返回错误结果。#75551 - 针对 GIN 倒排索引的纯 AND
MATCH查询在目标段为空时返回虚假错误。#75161 - CLucene
match_all查询返回了不正确的结果;通过升级 CLucene 依赖项解决了该问题。#75180 - 向量索引重写直接在共享表 schema 上注册了一个合成距离列,导致同一表上无关的并发查询出现
Multiple entries with same key错误。#74785 - Join 重排剪枝可能会剪掉仍被扫描谓词引用的列,导致统计估算抛出
missing statistic of col。#74791 avg(DISTINCT x)被错误地通过 sum/count 物化视图重写,在存在重复值时静默丢弃DISTINCT并返回错误结果。#75071ALTER TABLE ... MODIFY COLUMN ... AFTER <nonexistent_col>抛出了内部NullPointerException,而非清晰的语义错误。#75073SHOW CREATE ROUTINE LOAD在没有COLUMNS TERMINATED BY子句的作业中,于第一个加载描述子句之前错误地输出了一个多余的前导逗号。#75522- 包含 CTE 的
SECURITY INVOKER视图在 CTE 名称被误认为真实表引用时,可能因 NPE 导致权限检查失败。#74813 - 当日期/日期时间边界字面量移位溢出可表示范围时(例如
<= '9999-12-31'),ReduceCastRule会以SemanticException中止查询规划。#75036 - 当 join 条件使用 null 安全等于(
<=>)析取时,SplitJoinORToUnionRule会输出重复行。#75038 - 在多表外部查询的并行元数据准备线程间共享的
Tracers在enable_profile=true下导致了IllegalStateException。#74746 ChunksPartitioner中的分区消费者错误被静默丢弃,导致分区 TopN 在不报错的情况下返回部分或错误结果。#74693- BE vacuum 任务在 FE 调用方超时后仍以僵尸进程形式继续运行,耗尽了
RELEASE_SNAPSHOT线程池并导致 vacuum 吞吐量崩溃。#74694 - 自动 vacuum 竞争可能瞬间计算出比飞行中事务大一的
minActiveTxnId,导致 BE 删除仍需使用的合并事务日志,并永 久阻塞发布。#74906 - 由于 FE EOS 取消与 BE 第二阶段部署之间存在竞争,查询在成功完成后被错误地标记为已取消。#75009
- 当聚合 TopN 运行时过滤器构建键为
ConstColumn时,BE 在AggTopNRuntimeFilterUpdaterImpl中因SIGSEGV崩溃。#74809 #74941 - 当所有非空数组均为空时,
array_map/transform静默丢弃NULL行并返回错误的行数。#75141 - 在 JIT 编译表达式中,超过 2^64 的
LARGEINT/DECIMAL128字面量被静默截断为 64 位。#75137 - 当最后一个字符具有截断或无效的多字节前导字节且分隔符为空时,UTF-8 字符串函数(
split、split_part、str_to_map)会读取超出字符串末尾的内容。#75068 - 即使在
ALLOW_THROW_EXCEPTIONSQL 模式下,parse_json()也会对格式错误的 JSON 静默返回NULL,而不是使查询失败。#74976 - 严格模式下的数值窄化转换对槽数据未定义的
NULL行错误地引发了溢出错误。#74903 - 由于负数截断除法余数,1970年前的 Parquet
INT64时间戳(含非零亚秒部分)被解码为垃圾值。#75207 - 1970年前的 ORC
TIMESTAMP值在加载时丢失了亚秒部分。#75432 - ORC stripe 最小/最大时间戳统计信息对1970年前及亚秒边界的解码不正确,导致数据文件被错误地剪枝。#75543
- 嵌套在
ARRAY、MAP或STRUCT列中的INT96Parquet 时间戳在加载时丢失了一个会话时区偏移量。#74868 - Parquet
UINT_32值在加载到BIGINT列时进行了符号扩展而非零扩展,导致高位无符号整数被静默存储为负值。#75002 HiveDataSource析构函数在销毁_pool(及其Expr节点)之前先销毁了_scanner_ctx(持有引用这些节点的谓词),从而导致堆释放后使用问题。#74818