StarRocks 版本 4.0
警告
降级说明
-
升级 StarRocks 至 v4.0 后,请勿直接降级至 v3.5.0 & v3.5.1,否则会导致元数据不兼容和 FE 崩溃。必须将集群降级至 v3.5.2 或更高版本,以防止这些问题。
-
在将集群从 v4.0.2 降级到 v4.0.1、v4.0.0 以及 v3.5.2~v3.5.10 之前,请执行以下语句
SET GLOBAL enable_rewrite_simple_agg_to_meta_scan=false;将集群升级回 v4.0.2 及更高版本后,请执行以下语句
SET GLOBAL enable_rewrite_simple_agg_to_meta_scan=true;
4.0.5
发布日期:2026 年 2 月 3 日
改进
- Paimon 版本已更新至 1.3.1。 #67098
- 恢复了 DP 统计信息估算中丢失的优化,以减少冗余计算。 #67852
- 改进了 DP Join 重排序的剪枝,以更早地跳过昂贵的候选计划。 #67828
- 优化了 JoinReorderDP 的分区枚举,以减少对象分配,并增加了原子计数上限(≤ 62)。 #67643
- 优化了 DP Join 重排序的剪枝,并增加了对 BitSet 的检查,以减少流操作的开销。 #67644
- 在 DP 统计信息估算期间跳过谓词列统计信息收集,以减少 CPU 开销。 #67663
- 优化了相关的 Join 行数估算,以避免重复构建
Statistics对象。 #67773 - 减少了
Statistics.getUsedColumns中的内存分配。 #67786 - 当仅更新行数时,避免了不必要的
Statistics映射复制。 #67777 - 当查询中不存在聚合时,跳过聚合下推逻辑,以减少开销。 #67603
- 改进了窗口 COUNT DISTINCT,增加了对融合的多重聚合的支持,并优化了 CTE 生成。 #67453
- 在 Trino 方言中支持
map_agg函数。 #66673 - 在物理规划期间支持批量检索 LakeTablet 位置信息,以减少共享数据集群中的 RPC 调用。 #67325
- 为共享数据集群的 Publish Version 事务添加了线程池,以提高并发性。 #67797
- 通过将数据库级锁替换为表级锁,优化了 LocalMetastore 的锁定粒度。 #67658
- 重构了 MergeCommitTask 的生命周期管理,并增加了对任务取消的支持。 #67425
- 支持自动集群快照的间隔。 #67525
- 在 MemTrackerManager 中自动清理了未使用的
mem_pool条目。 #67347 - 在仓库空闲检查期间忽略了
information_schema查询。 #67958 - 根据数据分布,支持为 Iceberg 表接收器动态启用全局 shuffle。 #67442
- 为连接器接收器模块添加了 Profile 指标。 #67761
- 改进了 Profiles 中加载溢出指标的收集和显示,区分了本地和远程 I/O。 #67527
- 将 Async-Profiler 的日志级别更改为 Error,以避免重复警告日志。 #67297
- 在 BE 关机时通知 Starlet,以便将 SHUTDOWN 状态报告给 StarMgr。 #67461
Bug 修复
已修复以下问题
- 缺少对包含连字符(
-)的合法简单路径的支持。 #67988 - 当聚合下推到涉及 JSON 类型的分组键时发生运行时错误。 #68142
- JSON 路径重写规则错误地修剪了分区谓词中引用的分区列。 #67986
- 使用统计信息重写简单聚合时出现类型不匹配问题。 #67829
- 分区 Join 中潜在的堆缓冲区溢出。 #67435
- 下推复杂表达式时引入了重复的
slot_ids。 #67477 - ExecutionDAG 片段连接中因缺少前提条件检查而导致的除零错误。 #67918
- 单个 BE 的片段并行准备可能导致的问题。 #67798
- 由于 RawValuesSourceOperator 缺少
set_finished方法,导致操作符不正确终止。 #67609 - BE 因列聚合器中不支持 DECIMAL256 类型(精度 > 38)而崩溃。 #68134
- 共享数据集群不支持通过在请求中携带
schema_key来对 DELETE 操作进行 Fast Schema Evolution v2。 #67456 - 共享数据集群不支持通过同步物化视图和传统模式更改进行 Fast Schema Evolution v2。 #67443
- 当 FE 降级期间禁用文件捆绑时,Vacuum 可能会意外删除文件。 #67849
- MySQLReadListener 中不正确的优雅退出处理。 #67917
4.0.4
发布日期:2026 年 1 月 16 日
改进
- 支持运算符和驱动程序的并行准备,以及单节点批量片段部署,以提高查询调度性能。 #63956
- 针对大型分区表,通过惰性评估优化了
deltaRows的计算。 #66381 - 通过顺序迭代优化了 Flat JSON 处理,并改进了路径推导。 #66941 #66850
- 支持更早地释放 Spill Operator 内存,以减少组执行中的内存使用。 #66669
- 优化了逻辑以减少字符串比较开销。 #66570
- 改进了
GroupByCountDistinctDataSkewEliminateRule和SkewJoinOptimizeRule中的偏斜检测,以支持直方图和基于 NULL 的策略。 #66640 #67100 - 在 Chunk 中通过移动语义增强了列所有权管理,以减少写时复制开销。 #66805
- 对于共享数据集群,在 FE 中添加了
TableSchemaService并更新了MetaScanNode,以支持 Fast Schema Evolution v2 模式检索。 #66142 #66970 - 支持多仓库 Backend 资源统计和并行度(DOP)计算,以实现更好的资源隔离。 #66632
- 通过 StarRocks 会话变量
connector_huge_file_size支持配置 Iceberg 分片大小。 #67044 - 在
QueryDumpDeserializer中支持标签格式的统计信息。 #66656 - 添加了 FE 配置
lake_enable_fullvacuum(默认值:false),允许禁用共享数据集群中的 Full Vacuum。 #63859 - lz4 依赖已更新至 v1.10.0。 #67045
- 当行数为 0 时,为样本类型基数估算添加了回退逻辑。 #65599
- 为
array_sort中的 lambda 比较器验证了严格弱序属性。 #66951 - 优化了获取外部表元数据(Delta/Hive/Hudi/Iceberg)失败时的错误消息,显示根本原因。 #66916
- 支持在查询超时时转储管道状态,并在 FE 中以
TIMEOUT状态取消。 #66540 - 在 SQL 黑名单错误消息中显示匹配的规则索引。 #66618
- 在
EXPLAIN输出中为列统计信息添加了标签。 #65899 - 过滤掉了正常查询完成(例如,达到 LIMIT)的“取消片段”日志。 #66506
- 当仓库暂停时,减少了 Backend 心跳失败日志。 #66733
- 支持
ALTER STORAGE VOLUME语法中的IF EXISTS。 #66691
Bug 修复
已修复以下问题
- 由于缺少
withLocalShuffle,在低基数优化下DISTINCT和GROUP BY结果不正确。 #66768 - 使用 Lambda 表达式重写 JSON v2 函数时出现重写错误。 #66550
- 在相关子查询中的 Null 感知 Left Anti Join 中,分区 Join 应用不正确。 #67038
- Meta Scan 重写规则中行数计算不正确。 #66852
- 在通过统计信息重写 Meta Scan 时,Union 节点中的可空属性不匹配。 #67051
- 当
PARTITION BY和ORDER BY缺失时,BE 因排名窗口函数的优化逻辑而崩溃。 #67094 - 在具有窗口函数的 Group Execution Join 中可能出现错误的结果。 #66441
- 在特定过滤条件下
PartitionColumnMinMaxRewriteRule产生不正确的结果。 #66356 - 聚合后 Union 操作中可空属性推导不正确。 #65429
- 在处理压缩参数时
percentile_approx_weighted崩溃。 #64838 - 溢出时因大字符串编码而崩溃。 #61495
- 在下推本地 TopN 时,由于多次调用
set_collector而导致崩溃。 #66199 - LowCardinality 重写逻辑中的依赖推导错误。 #66795
- Rowset 提交失败时 Rowset ID 泄露。 #66301
- MetaCache 锁争用。 #66637
- 当使用条件更新进行列模式部分更新时,导入失败。 #66139
- 在 ALTER 操作期间,Tablet 删除导致并发导入失败。 #65396
- 由于 RocksDB 迭代超时,元数据加载错误。 #65146
- 在共享数据集群升级期间,未在表创建和 Schema 更改时应用压缩设置。 #65673
- 升级期间 Delete Vector CRC32 兼容性问题。 #65442
- 克隆任务失败后文件清理的状态检查逻辑错误。 #65709
INSERT OVERWRITE后统计信息收集逻辑异常。 #65327 #65298 #65225- FE 重启后外键约束丢失。 #66474
- 仓库删除后元数据检索错误。 #66436
- 高选择性过滤器下审计日志扫描统计信息不准确。 #66280
- 查询错误率指标计算逻辑不正确。 #65891
- 任务退出时可能出现 MySQL 连接泄露。 #66829
- SIGSEGV 崩溃时 BE 状态未立即更新。 #66212
- LDAP 用户登录期间出现 NPE。 #65843
- HTTP SQL 请求切换用户时错误日志不准确。 #65371
- TCP 连接重用期间 HTTP 上下文泄露。 #65203
- 从 Follower 转发的查询在 Profile 日志中缺少 QueryDetail。 #64395
- 审计日志中缺少 Prepare/Execute 详细信息。 #65448
- HyperLogLog 内存分配失败导致的崩溃。 #66747
trim函数内存预留问题。 #66477 #66428- CVE-2025-66566 和 CVE-2025-12183。 #66453 #66362 #67053
- Exec Group 驱动程序提交中的竞态条件。 #66099
- Pipeline 倒计时中的使用后释放风险。 #65940
MemoryScratchSinkOperator在队列关闭时挂起。 #66041- 文件系统缓存键冲突问题。 #65823
SHOW PROC '/compactions'中子任务计数不正确。 #67209- 查询 Profile API 未返回统一的 JSON 格式。 #67077
getTable异常处理不当,影响物化视图检查。 #67224- 原生表和云原生表在
DESC语句的Extra列输出不一致。 #67238 - 单节点部署中的竞态条件。 #67215
- 第三方库的日志泄露。 #67129
- REST Catalog 认证逻辑不正确,导致认证失败。 #66861
4.0.3
发布日期:2025 年 12 月 25 日
改进
- 支持 STRUCT 数据类型的
ORDER BY子句 #66035 - 支持使用属性创建 Iceberg 视图,并在
SHOW CREATE VIEW输出中显示属性。 #65938 - 支持使用
ALTER TABLE ADD/DROP PARTITION COLUMN修改 Iceberg 表的分区规范。 #65922 - 支持在分框窗口(例如,
ORDER BY/PARTITION BY)上执行COUNT/SUM/AVG(DISTINCT)聚合,并提供优化选项。 #65815 - 通过使用
memchr进行单字符分隔符解析,优化了 CSV 解析性能。 #63715 - 添加了一个优化器规则,将 Partial TopN 推送到 Pre-Aggregation 阶段,以减少网络开销。 #61497
- 增强了数据缓存监控
- 优化了 Sort 和 Aggregation 运算符,以支持在 OOM 场景下快速释放内存。 #66157
- 在 FE 中为共享数据集群添加了
TableSchemaService,允许 CN 按需获取特定模式。 #66142 - 优化了 Fast Schema Evolution,以在所有依赖的导入作业完成之前保留历史模式。 #65799
- 增强了
filterPartitionsByTTL,以正确处理 NULL 分区值,防止所有分区被过滤掉。 #65923 - 优化了
FusedMultiDistinctState,在重置时清除关联的 MemPool。 #66073 - 在 Iceberg REST Catalog 中,将
ICEBERG_CATALOG_SECURITY属性检查设置为不区分大小写。 #66028 - 在共享数据集群中添加了 HTTP 端点
GET /service_id以检索 StarOS 服务 ID。 #65816 - 在 Kafka 消费者配置中,用
bootstrap.servers替换了已弃用的metadata.broker.list。 #65437 - 添加了 FE 配置
lake_enable_fullvacuum(默认值:false),以允许禁用 Full Vacuum Daemons。 #66685 - lz4 库已更新至 v1.10.0。 #67080
Bug 修复
已修复以下问题
latest_cached_tablet_metadata可能导致在批量发布期间版本被错误跳过。 #66558- 在共享无关集群中运行
CatalogRecycleBin时,ClusterSnapshot相对检查可能导致的问题。 #66501 - 在 Spill 操作期间,当写入复杂数据类型(ARRAY/MAP/STRUCT)到 Iceberg 表时,BE 崩溃。 #66209
- 当写入器的初始化或首次写入失败时,连接器 Chunk Sink 可能挂起。 #65951
- 连接器 Chunk Sink 错误,其中
PartitionChunkWriter初始化失败导致关闭期间发生空指针解引用。 #66097 - 设置一个不存在的系统变量会静默成功,而不是报告错误。 #66022
- 数据缓存损坏时,Bundle 元数据解析失败。 #66021
- 当结果为空时,MetaScan 返回 NULL 而不是 0 作为计数列。 #66010
SHOW VERBOSE RESOURCE GROUP ALL显示 NULL 而不是default_mem_pool,用于在早期版本中创建的资源组。 #65982- 禁用
flat_json表配置后,在查询执行期间出现RuntimeException。 #65921 - 在共享数据集群中,Schema 更改后将
min/max统计信息重写到 MetaScan 时出现类型不匹配问题。 #65911 - 当
PARTITION BY和ORDER BY缺失时,BE 因排名窗口优化而崩溃。 #67093 - 在合并运行时过滤器时,
can_use_bf检查不正确,可能导致结果错误或崩溃。 #67062 - 将运行时位集过滤器推送到嵌套 OR 谓词中会导致错误的结果。 #67061
- 在 DeltaWriter 完成后写入或刷新操作可能导致的数据竞争和数据丢失问题。 #66966
- 在将简单聚合重写为 MetaScan 时,由于可空属性不匹配而导致执行错误。 #67068
- MetaScan 重写规则中行数计算不正确。 #66967
- 由于缓存的 Tablet 元数据不一致,在批量发布期间版本可能被错误跳过。 #66575
- HyperLogLog 操作中内存分配失败的处理不当。 #66827
4.0.2
发布日期:2025 年 12 月 4 日
新功能
- 引入了新的资源组属性
mem_pool,允许多个资源组共享同一个内存池并强制执行池的总内存限制。此功能向后兼容。如果未指定mem_pool,则使用default_mem_pool。 #64112
改进
- 在启用文件捆绑后,减少了 Vacuum 操作期间的远程存储访问。 #65793
- 文件捆绑功能会缓存最新的 Tablet 元数据。 #65640
- 提高了长字符串场景下的安全性和稳定性。 #65433 #65148
- 优化了
SplitTopNAggregateRule逻辑,以避免性能回归。 #65478 - 将 Iceberg/DeltaLake 表的统计信息收集策略应用于其他外部数据源,以避免在表是单表时收集统计信息。 #65430
- 在数据缓存 HTTP API
api/datacache/app_stat中添加了 Page Cache 指标。 #65341 - 支持 ORC 文件分片,以实现对单个大型 ORC 文件的并行扫描。 #65188
- 在优化器中为 IF 谓词添加了选择性估算。 #64962
- 支持在 FE 中对
DATE和DATETIME类型的hour、minute和second进行常量求值。 #64953 - 默认启用将简单聚合重写为 MetaScan。 #64698
- 在共享数据集群中,优化了多副本分配处理,以提高可靠性。 #64245
- 在审计日志和指标中公开缓存命中率。 #63964
- 使用 HyperLogLog 或采样估算每个桶的唯一值计数,为谓词和 join 提供更准确的 NDV。 #58516
- 支持与 SQL 标准语义的 FULL OUTER JOIN USING。 #65122
- 在优化器超时时打印内存信息,以便诊断。 #65206
Bug 修复
已修复以下问题
- DECIMAL56
mod相关问题。 #65795 - Iceberg 扫描范围处理相关问题。 #65658
- 临时分区和随机桶上的 MetaScan 重写问题。 #65617
JsonPathRewriteRule在透明物化视图重写后使用错误的表。 #65597- 当
partition_retention_condition引用生成列时,物化视图刷新失败。 #65575 - Iceberg min/max 值类型问题。 #65551
- 当
enable_evaluate_schema_scan_rule设置为true时,跨不同数据库查询information_schema.tables和views的问题。 #65533 - JSON 数组比较中的整数溢出。 #64981
- MySQL Reader 不支持 SSL。 #65291
- ARM 构建问题,由 SVE 构建不兼容引起。 #65268
- 基于桶感知执行的查询可能会在分桶的 Iceberg 表上卡住。 #65261
- OLAP 表扫描由于缺少内存限制检查而导致的健壮错误传播和内存安全问题。 #65131
行为变更
4.0.1
发布日期:2025 年 11 月 17 日
改进
- 优化 TaskRun 会话变量处理,仅处理已知变量。 #64150
- 默认支持从元数据收集 Iceberg 和 Delta Lake 表的统计信息。 #64140
- 支持收集具有分桶和截断分区转换的 Iceberg 表的统计信息。 #64122
- 支持检查 FE
/proc剖析以进行调试。 #63954 - 增强了 Iceberg REST catalog 的 OAuth2 和 JWT 认证支持。 #63882
- 改进了 bundle tablet 元数据验证和恢复处理。 #63949
- 改进了扫描范围内存估算逻辑。 #64158
Bug 修复
已修复以下问题
行为变更
- 为 Iceberg Catalog 添加了
enable_iceberg_table_cache属性,以选择性地禁用 Iceberg 表缓存并允许始终读取最新数据。 #64082 - 通过在计划前刷新外部表,确保
INSERT ... SELECT读取最新的元数据。 #64026 - 增加了锁表槽位到 256,并在慢查询日志中添加了
rid。 #63945 - 由于与基于事件的调度不兼容,暂时禁用了
shared_scan。 #63543 - 将 Hive Catalog 的默认缓存 TTL 更改为 24 小时,并删除了未使用的参数。 #63459
- 根据会话变量和插入的列数自动确定部分更新模式。 #62091
4.0.0
发布日期:2025 年 10 月 17 日
数据湖分析
- 统一了 BE 元数据的 Page Cache 和 Data Cache,并采用了自适应策略进行扩展。 #61640
- 优化了 Iceberg 统计信息的元数据文件解析,避免重复解析。 #59955
- 通过高效跳过数据文件扫描,优化了 COUNT/MIN/MAX 查询 Iceberg 元数据,显著提高了大型分区表聚合查询的性能,并减少了资源消耗。 #60385
- 通过过程
rewrite_data_files支持 Iceberg 表的压缩。 - 支持带有隐藏分区的 Iceberg 表,包括创建、写入和读取这些表。 #58914
- 支持在创建 Iceberg 表时设置排序键。
- 优化了 Iceberg 表的 sink 性能。
- 增强了 Iceberg 表的桶感知执行,以提高分桶表的并发能力和分布能力。 #61756
- 支持 Paimon catalog 中的 TIME 数据类型。 #58292
- 将 Iceberg 版本升级到 1.10.0。 #63667
安全与认证
- 在使用 JWT 认证和 Iceberg REST Catalog 的场景中,StarRocks 支持通过 REST Session Catalog 将用户登录信息传递给 Iceberg,以便后续进行数据访问认证。 #59611 #58850
- 支持 Iceberg catalog 的 vended credentials。
- 支持将 StarRocks 内部角色授予通过 Group Provider 获取的外部组。 #63385 #63258
- 为外部表添加了 REFRESH 权限,以控制刷新它们的权限。 #63385
存储优化与集群管理
- 为共享数据集群中的云原生表引入了文件打包优化,以自动打包由加载、Compaction 或 Publish 操作生成的数据文件,从而减少因高频访问外部存储系统而产生的 API 成本。文件打包在 v4.0 或更高版本创建的表中默认启用。 #58316
- 支持多表写写事务,允许用户控制 INSERT、UPDATE 和 DELETE 操作的原子提交。该事务支持 Stream Load 和 INSERT INTO 接口,有效保证了 ETL 和实时写入场景下的跨表一致性。 #61362
- 支持 Kafka 4.0 用于例行加载。
- 支持共享无关集群的主键表上的全文倒排索引。
- 支持修改 Aggregate 表的聚合键。 #62253
- 支持对 catalog、数据库、表、视图和物化视图的名称启用不区分大小写的处理。 #61136
- 支持在共享数据集群中将计算节点列入黑名单。 #60830
- 支持全局连接 ID。 #57256
- 在 Information Schema 中添加了
recyclebin_catalogs元数据视图,以显示可恢复的已删除元数据。 #51007
查询与性能提升
- 支持 DECIMAL256 数据类型,将精度上限从 38 位扩展到 76 位。其 256 位存储为高精度金融和科学计算场景提供了更好的适应性,有效缓解了 DECIMAL128 在非常大的聚合和高阶运算中的精度溢出问题。 #59645
- 提高了基本算子的性能。 #61691 #61632 #62585 #61405 #61429
- 优化了 JOIN 和 AGG 算子的性能。 #61691
- [预览] 引入了 SQL Plan Manager,允许用户将查询计划绑定到查询,从而防止因系统状态变化(主要是数据更新和统计信息更新)导致的查询计划更改,从而稳定查询性能。 #56310
- 引入了 Partition-wise Spillable Aggregate/Distinct 算子,取代了基于排序聚合的原始 Spill 实现,显著提高了聚合性能,并减少了复杂和高基数 GROUP BY 场景下的读写开销。 #60216
- Flat JSON V2
- 支持 STRING 数据类型的自适应 ZoneMap 索引创建策略。 #61960
- 增强查询可观测性
- 物化视图重写考虑了原始表的分布键和排序键,提高了最优物化视图的选择。 #62830
函数与 SQL 语法
- 添加了以下函数
- 提供了以下语法扩展
行为变更
- 调整物化视图参数
auto_partition_refresh_number的逻辑,以限制刷新分区的数量,无论自动刷新还是手动刷新。 #62301 - Flat JSON 默认启用。 #62097
- 系统变量
enable_materialized_view_agg_pushdown_rewrite的默认值设置为true,表示默认启用物化视图查询重写的聚合下推。 #60976 - 更改了
information_schema.materialized_views中某些列的类型,以更好地匹配相应数据。 #60054 - 当分隔符不匹配时,
split_part函数返回 NULL。 #56967 - 在 CTAS/CREATE MATERIALIZED VIEW 中使用 STRING 替换定长 CHAR,以避免推断错误的列长度,这可能会导致物化视图刷新失败。 #63114 #62476
- 数据缓存相关配置得到简化。 #61640
datacache_mem_size和datacache_disk_size现在生效。storage_page_cache_limit、block_cache_mem_size、block_cache_disk_size已弃用。
- 添加了新的 catalog 属性(Hive 的
remote_file_cache_memory_ratio,以及 Iceberg 的iceberg_data_file_cache_memory_usage_ratio和iceberg_delete_file_cache_memory_usage_ratio),用于限制 Hive 和 Iceberg 元数据缓存使用的内存资源,并将默认值设置为0.1(10%)。将元数据缓存 TTL 调整为 24 小时。 #63459 #63373 #61966 #62288 - SHOW DATA DISTRIBUTION 将不再合并具有相同桶序列号的所有物化索引的统计信息。它仅在物化索引级别显示数据分布。 #59656
- 自动分桶表的默认桶大小从 4GB 更改为 1GB,以提高性能和资源利用率。 #63168
- 系统根据相应的会话变量和 INSERT 语句中的列数来确定部分更新模式。 #62091
- 优化了 Information Schema 中的
fe_tablet_schedules视图。 #62073 #59813- 将
TABLET_STATUS列重命名为SCHEDULE_REASON,将CLONE_SRC列重命名为SRC_BE_ID,将CLONE_DEST列重命名为DEST_BE_ID。 CREATE_TIME、SCHEDULE_TIME和FINISH_TIME列的数据类型已从DOUBLE更改为DATETIME。
- 将
- 在某些 FE 指标中添加了
is_leader标签。 #63004 - 使用 Microsoft Azure Blob Storage 和 Data Lake Storage Gen 2 作为对象存储的共享数据集群在升级到 v4.0 后会遇到数据缓存失败。系统将自动重新加载缓存。