StarRocks 3.2 版本全解析:数据湖分析、主键表持久化索引与 Data Cache 演进
【免费下载链接】starrocksThe world's fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks
StarRocks 3.2 是一个横跨 2023 年 12 月至 2025 年 4 月的大版本,从 3.2.0 一直迭代到 3.2.16,核心围绕数据湖分析(Unified Catalog、Hive/Iceberg 管理表)、主键表持久化索引、Data Cache(原 Block Cache)重命名与参数重构、Pipeline 引擎全面强制启用等方向展开。本文将基于仓库 docs/en/release_notes/release-3.2.md 的完整发布说明,结合 be/src/common/config.h、fe/fe-core/src/main/java/com/starrocks/common/Config.java 等源码逐项印证,帮助你完整理解 3.2 版本的架构变化、参数体系与升级注意事项,并掌握每个小版本的修复重点。
1. 版本总览与时间线
StarRocks 3.2 系列共发布了 17 个版本(3.2.0 至 3.2.16),其中两个版本被撤回:
| 版本 | 发布日期 | 版本性质 |
|---|---|---|
| 3.2.0 | 2023-12-01 | 大版本首发 |
| 3.2.1 | 2023-12-21 | 维护版本 |
| 3.2.2 | 2023-12-30 | 维护版本 |
| 3.2.3 | 2024-02-08 | 维护版本 |
| 3.2.4 | 2024-03-12 | Yanked(撤回) |
| 3.2.5 | 2024-04-12 | Yanked(撤回) |
| 3.2.6 | 2024-04-18 | 维护版本 |
| 3.2.7 | 2024-05-24 | 维护版本 |
| 3.2.8 | 2024-06-07 | 维护版本 |
| 3.2.9 | 2024-07-11 | 维护版本 |
| 3.2.10 | 2024-08-23 | 维护版本 |
| 3.2.11 | 2024-09-09 | 维护版本 |
| 3.2.12 | 2024-10-23 | 维护版本 |
| 3.2.13 | 2024-12-13 | 维护版本 |
| 3.2.14 | 2025-01-08 | 维护版本 |
| 3.2.15 | 2025-02-14 | 维护版本 |
| 3.2.16 | 2025-04-30 | 维护版本 |
3.2.4 与 3.2.5 被撤回的原因:查询外部 Catalog(如 Hive、Iceberg)中的外部表时存在权限问题——即使用户对该表拥有 SELECT 权限,访问仍会被拒绝,而SHOW GRANTS却显示用户拥有该权限。该问题仅影响外部 Catalog 中的外部表查询,其他查询不受影响。临时规避方法是重新授予 SELECT 权限(但SHOW GRANTS会出现重复权限条目),升级到 v3.2.6 后可用REVOKE移除重复条目。
2. 数据湖分析(Data Lake Analytics):3.2 的核心增强
2.1 Unified Catalog:统一访问 Hive / Iceberg / Hudi / Delta Lake
3.2.0 引入了Unified Catalog,允许通过一个 Catalog 访问共享同一元数据服务(如 Hive metastore 或 AWS Glue)的不同表格式:Hive、Iceberg、Hudi 和 Delta Lake。这大幅简化了混合数据湖场景下的元数据管理,用户不再需要为每种表格式单独创建 Catalog。
2.2 Hive Catalog 增强:管理表创建、写入与 JNI 读取
- 3.2.0 支持在 Hive Catalog 中创建和删除数据库、管理表(managed table),并支持通过
INSERT或INSERT OVERWRITE将数据导出到 Hive 管理表。 - 3.2.1 支持通过 Java Native Interface(JNI)读取 Hive Catalog 表及文件外部表中的Avro、SequenceFile、RCFile格式。
- 3.2.4 支持在 Hive Catalog 中执行
CREATE TABLE LIKE。 - 3.2.9 起 Hive 表支持
skip.header.line.count属性,便于跳过 CSV 类文件的表头行。
2.3 外部表统计信息与元数据管理
- 3.2.0 支持使用
ANALYZE TABLE收集 Hive 和 Iceberg 表的统计信息并存储在 StarRocks 中,从而优化查询计划、加速后续查询;同时支持外部表的信息模式(Information Schema),方便 BI 工具等外部系统与 StarRocks 交互。 - 3.2.3 支持从 Iceberg 表(含 Partition Transform)收集统计信息。
- 3.2.7 的
ANALYZE TABLE支持为外部表收集直方图(histogram),可有效应对数据倾斜问题。 - 3.2.14 支持收集 Paimon 表的统计信息。
2.4 Iceberg Catalog 能力优化(3.2.0)
- 支持从 Manifest 文件收集列统计信息以加速查询;
- 支持从 Puffin 文件收集 NDV(不同值数量)以加速查询;
- 支持分区裁剪(partition pruning);
- 降低 Iceberg 元数据内存占用,提升大元数据量或高并发查询场景下的稳定性。
3.2.4 起 Iceberg Catalog 参数enable_iceberg_metadata_cache默认值调整为false(3.2.1 至 3.2.3 默认true);若 Iceberg 集群使用 AWS Glue 作为 metastore,该参数仍默认true,使用 Hive metastore 等其他服务时默认false。
2.5 FILES() 表函数与数据湖读写
3.2.0 大幅扩展了FILES()表函数:
- 支持从Azure 或 GCP加载 Parquet 和 ORC 格式数据;
- 支持通过参数
columns_from_path从文件路径中提取 key/value 对作为列值; - 支持加载 ARRAY、JSON、MAP、STRUCT 等复杂数据类型。
3.2 后续版本持续优化 FILES():
- 3.2.10:自动将 Parquet 中
logical_type为JSON的BYTE_ARRAY数据转换为 StarRocks 的 JSON 类型; - 3.2.11:读取 Parquet 时支持自动推断 STRUCT 类型;修复读取 TIMESTAMP 等复杂类型时时区使用错误的问题;
- 3.2.13:修复 FILES() 读取了未查询列的问题;
- 3.2.15 前(3.2.5):优化了不同文件里同名不同类型列的合并规则,按粒度更大的类型合并(如 FLOAT 与 INT 合并为 DOUBLE)。
同时 3.2.0 支持使用INSERT INTO FILES将数据从 StarRocks 卸载为 AWS S3 或 HDFS 上的Parquet 格式文件,3.2.3 新增会话变量connector_sink_compression_codec用于指定写入 Hive/Iceberg 表或 FILES() 导出时的压缩算法(GZIP、BROTLI、ZSTD、LZ4)。
2.6 PIPE:面向 S3/HDFS 的持续数据导入
3.2.0 支持通过PIPE从 AWS S3 或 HDFS 持续加载数据:当 PIPE 检测到远程存储目录有新文件或文件被修改时,自动将新数据加载到 StarRocks 目标表;加载过程中 PIPE 自动将大的加载任务拆分为多个小的串行任务,提升大规模数据导入场景的稳定性并降低错误重试成本。3.2.3 支持CREATE OR REPLACE PIPE,3.2.11 支持对 FILES() 与 PIPE 的认证信息进行掩码处理。
2.7 Reader 性能优化(3.2.0)
- ORC Reader:ORC Column Reader 对 VARCHAR/CHAR 的读取性能提升近两倍;优化 Zlib 压缩格式 ORC 文件的解压性能。
- Parquet Reader:支持自适应 I/O 合并(根据过滤效果自适应合并带谓词与不带谓词的列,降低 I/O);优化 Dict Filter(支持 STRUCT 子列与按需字典列解码);优化 Dict Decode 与 late materialization;支持缓存文件 footer 避免重复计算;支持 lzo 压缩格式解压。
- CSV Reader:优化读取性能;支持 Snappy 和 lzo 压缩格式解压。
- 优化 count 计算的性能。
3. 主键表:持久化索引与同步 Publish
3.1 持久化索引与同步发布机制
3.2.0 在共享数据(shared-data)集群中支持将主键表的索引持久化到本地磁盘(此前仅支持存放到对象存储),并优化了主键表持久化索引的内存使用逻辑,同时降低 I/O 读写放大(对应 PR #24875、#27577、#28769)。主键表还支持跨本地磁盘的数据再分布。
同步 Publish:写入主键表的数据加载任务的 Publish 阶段由异步模式改为同步模式,加载任务完成后数据可立即查询。该行为由 FE 配置项enable_sync_publish控制,3.2.0 起默认值从false改为true,在源码 Config.java 中可以看到当前默认值即为true:
public static boolean enable_sync_publish = true;同时enable_persistent_index_by_default(是否默认为主键表启用持久化索引)默认值也从false改为true(见 Config.java)。
3.2 主键表后续迭代
3.2 系列对主键表持续投入:
- 3.2.3:新增 BE 配置项
lake_pk_compaction_max_input_rowsets(共享数据集群中主键表 compaction 任务允许的最大输入 rowset 数,默认500,见 config.h),用于优化 compaction 任务资源消耗;新增pindex_major_compaction_limit_per_disk(单盘 compaction 最大并发度,默认1,解决因 compaction 导致各磁盘 I/O 不均衡的问题);新增enable_lazy_delta_column_compaction(默认true,避免对 delta 列频繁 compaction)。 - 3.2.5:主键表支持Size-tiered Compaction,降低 I/O 放大(3.2.4 中共享数据集群的云原生主键表也支持该能力)。
- 3.2.7:支持混合行列存储表(hybrid row-column storage,Preview),提升主键表高并发低延迟点查与部分更新的性能;该功能暂不支持 ALTER TABLE 修改、修改 Sort Key 及列模式部分更新。
- 3.2.9:修复共享数据集群中主键表 Vertical Compaction 失败的问题。
- 3.2.10:修复列模式部分更新在大数据量更新场景下失败的问题;修复主键表持久化索引
l0快照在磁盘写失败时可能丢数据的问题;修复主键表索引持久化与 compaction 冲突导致克隆失败的问题。 - 3.2.13:修复主键表 Tablet 加载时优先级评估逻辑缺陷导致的版本识别错误与数据丢失(3.2.16 修复)。
4. 物化视图(Materialized View)演进
4.1 异步物化视图(3.2.0)
- Query Dump 文件可包含异步物化视图信息;
- 异步物化视图刷新任务默认启用Spill to Disk(落盘),降低内存消耗;
- 当视图、物化视图或其基表发生 Schema 变更时,支持异步物化视图自动刷新;
- 数据一致性:新增
query_rewrite_consistency属性定义基于一致性检查的查询改写规则;新增force_external_table_query_rewrite属性,用于外部 Catalog 异步物化视图是否允许强制查询改写; - 增加物化视图分区键一致性检查:使用带 PARTITION BY 表达式的窗口函数创建异步物化视图时,窗口函数的分区列必须与物化视图一致;
- 支持 Trace Query Profile 分析异步物化视图的透明改写。
4.2 异步物化视图后续增强
- 3.2.1:新增
sys.object_dependencies视图记录异步物化视图的血缘信息;支持基于 Iceberg Catalog 的异步物化视图分区级增量刷新;支持基于 Paimon Catalog 表的异步物化视图分区级刷新(Preview)。 - 3.2.3:支持备份和恢复异步物化视图;支持基于视图创建物化视图并做查询改写。
- 3.2.4:支持对基于逻辑视图创建的物化视图进行查询改写;物化视图刷新权限由
root用户改为创建物化视图的用户(不影响已有物化视图)。
4.3 同步物化视图
3.2.1 支持带 WHERE 子句创建同步物化视图;3.2.5 支持dict_mapping列属性,可显著简化全局字典构建过程中的加载,加速精确 COUNT DISTINCT 计算。
4.4 相关参数(3.2.3)
- FE 配置项
default_mv_refresh_immediate(默认true):创建物化视图后是否立即刷新; - FE 配置项
default_mv_refresh_partition_num默认值改为1:物化视图刷新涉及多分区时任务分批执行,每次只刷新一个分区,降低单次刷新资源消耗。
5. 查询能力与 SQL 函数
5.1 HTTP SQL API 与 Profile 分析
- 3.2.0 支持HTTP SQL API,用户可通过 HTTP 访问 StarRocks 数据并执行 SELECT、SHOW、EXPLAIN、KILL 操作;
- 支持 Runtime Profile 与基于文本的 Profile 分析命令(
SHOW PROFILELIST、ANALYZE PROFILE、EXPLAIN ANALYZE),可直接通过 MySQL 客户端分析 Profile,定位瓶颈。
5.2 新函数与兼容性
3.2.0 新增函数:
- 字符串函数:
substring_index、url_extract_parameter、url_encode、url_decode、translate; - 日期函数:
dayofweek_iso、week_iso、quarters_add、quarters_sub、milliseconds_add、milliseconds_sub、date_diff、jodatime_format、str_to_jodatime、to_iso8601、to_tera_date、to_tera_timestamp; - 模式匹配:
regexp_extract_all; - 哈希函数:
xx_hash3_64; - 聚合函数:
approx_top_k; - 窗口函数:
cume_dist、percent_rank、session_number; - 工具函数:
get_query_profile、is_role_in_session。
其他函数增强:
- 3.2.1:新增 Bitmap 函数
subdivide_bitmap、bitmap_from_binary、bitmap_to_binary;新增数组函数array_unique_agg;支持预处理语句(prepared statement),提升高并发点查性能并有效防 SQL 注入;新增日期函数milliseconds_diff(3.2.4)。 - 3.2.4:兼容 Trino 语法,支持
current_catalog、current_schema、to_char、from_hex、to_date、to_timestamp、index等函数;BITMAP类型列的agg_type可设为replace_if_not_null以支持仅更新表的部分列;将 STRING 转 DATETIME 的效率提升 35%~40%。 - 3.2.9:窗口函数支持
max_by与min_by。 - 3.2.15:窗口函数支持
max_by和min_by的补充支持(对应 PR #54961)。
5.3 行为变更相关会话变量
- 3.2.3 新增
enable_strict_order_by(默认TRUE):对"查询不同表达式使用重复别名且该别名同时是 ORDER BY 排序字段"(如select distinct t1.* from tbl1 t1 order by t1.k1;)报错,逻辑与 v2.3 及更早版本一致;设为FALSE时使用宽松去重机制。 - 3.2.3 新增
enable_materialized_view_for_insert(默认false):控制物化视图是否改写 INSERT INTO SELECT 中的查询。 - 3.2.3:Pipeline 框架内单查询内存限制改由
query_mem_limit约束(0表示不限),不再使用exec_mem_limit。 - 3.2.0 新增
large_decimal_underlying_type = "panic"|"double"|"decimal":设置 DECIMAL 溢出处理规则(立即报错 / 转 DOUBLE / 转 DECIMAL(38,s))。 - 3.2.4 新增
cbo_decimal_cast_string_strict(默认true):控制 CBO 将 DECIMAL 转为 STRING 的方式(严格转换,按 scale 截断并补 0);同时可通过会话变量cbo_eq_base_type调整常量与字符串类型列的比较规则。
6. 权限与安全:Apache Ranger 集成
3.2.0 支持通过Apache Ranger进行访问控制,提供更高等级的数据安全,并允许复用外部数据源的既有服务。集成后支持两种访问控制方式:
- 访问 StarRocks 内部表、外部表或其他对象时,基于 Ranger 中为 StarRocks Service 配置的访问策略实施访问控制;
- 访问外部 Catalog 时,可复用原始数据源对应的 Ranger 服务(如 Hive Service)进行控制(目前尚不支持对导出到 Hive 的数据做访问控制)。
3.2.9 进一步支持通过 Apache Ranger 实现列级访问控制,并优化了权限管理——限制user_admin角色的用户重置 root 用户密码。
7. 导入、导出与存储
7.1 Stream Load
- 3.2.7:Stream Load 支持传输压缩,可通过参数
compression与Content-Encoding指定压缩算法(GZIP、BZIP2、LZ4_FRAME、ZSTD),降低网络带宽开销。 - 3.2.9:Stream Load 支持将 JSON 字符串自动转换为 STRUCT/MAP/ARRAY 类型;支持直接使用
\t和\n作为行列分隔符,无需转换为十六进制 ASCII 码。 - 3.2.13:修复使用 HTTP 1.0 提交 Stream Load 失败的问题。
- 3.2.15:修复调度到 Alive 状态为 false 的节点时 Stream Load 失败的问题;修复主键表 Stream Load 部分更新报错的问题。
- 3.2.16:Stream Load 任务调度支持BE 节点黑名单,黑名单中的节点将不参与任务调度(PR #57919)。
7.2 Broker Load 与 Routine Load
- 3.2.3:Broker Load 支持加载 JSON 类型数据;新增 FE 配置项
routine_load_unstable_threshold_second(默认3600秒,见 Config.java)。 - 3.2.3 起 SHOW ROUTINE LOAD 返回新增
LatestSourcePosition字段,记录 Kafka topic 各分区最新消息位置,便于排查加载延迟;3.2.1 起新增OtherMsg字段展示最近一次失败任务的信息。 - 3.2.5:Broker Load 加载含 TIMESTAMP 数据的 ORC 文件时,转换到 DATETIME 可保留微秒精度。
- 3.2.12:优化 BE 复杂查询场景的内存分配与统计以避免 OOM;优化 FE 在 Schema Change 场景的内存使用;支持 List 分区表的备份与恢复。
- 3.2.13:修复 SHOW ROUTINE LOAD 后
loadRowsRate字段返回 0 的问题;修复 Routine Load 因事务过期被错误取消的问题(现在仅在数据库或表不存在时才取消任务);修复 Glue/S3 集成的多个问题(错误信息未显示根因、Glue 元数据服务下写 STRING 分区列 Hive 分区表报错、权限不足删除 Hive 表无错误提示)。
7.3 数据分布与分桶优化
- 3.2.0 支持对已有表手动优化表结构和数据分布策略:可设置新的分桶键、分桶数或排序键,也可为特定分区设置不同分桶数;支持为 Random Bucketing 的 Duplicate Key 表根据集群信息和数据量动态调整 tablet 数量(需在建表时添加
bucket_size属性)。 - 3.2.9 行为变更:创建非分区表未指定分桶数时,系统设置的最小分桶数为
16(此前为按公式2*BE 或 CN 数量计算的2);创建分区表未指定分桶数且分区数超过 5 时,分桶数规则改为max(2*BE 或 CN 数量, 按最大历史分区数据量计算的分桶数)。 - 3.2.15:List 分区策略的表支持 DELETE 语句的分区裁剪(PR #55400)。
7.4 存储冷却与 Schema 变更
- 3.2.0 支持分区表基于分区时间范围和冷却时间自动冷却,便于在分区级别进行冷热数据管理。
- 3.2.0 支持Fast Schema Evolution(由表属性
fast_schema_evolution控制,默认false,且不能用 ALTER TABLE 修改),开启后加减列的效率显著提升。 - 3.2.4 支持混合行列存储表执行 Schema Change,并支持 BITMAP、HLL、JSON、ARRAY、MAP、STRUCT 等复杂类型。
- 3.2.13 支持为特定表设置禁止 Base Compaction 的时间范围(PR #50120)。
8. 参数体系变更:Data Cache 重命名(重点)
8.1 Block Cache → Data Cache 参数重构
3.2.0 将Block Cache 重命名为 Data Cache,并引入一套以datacache前缀命名的新 BE 参数替换原block_cache前缀参数。升级到 v3.2 后旧参数仍会生效,但一旦启用新参数会覆盖旧参数;新旧参数混用不被支持,可能导致部分配置不生效。未来版本将废弃block_cache前缀参数,官方建议使用新参数。
新增的替换关系如下:
| 新参数(v3.2+) | 旧参数(≤v3.1) |
|---|---|
datacache_enable | block_cache_enable |
datacache_mem_size | block_cache_mem_size |
datacache_disk_size | block_cache_disk_size |
datacache_disk_path | block_cache_disk_path |
datacache_meta_path | block_cache_meta_path |
datacache_block_size | block_cache_block_size |
datacache_checksum_enable | block_cache_checksum_enable |
datacache_direct_io_enable | block_cache_direct_io_enable |
datacache_max_concurrent_inserts | block_cache_max_concurrent_inserts |
datacache_engine | block_cache_engine |
datacache_max_flying_memory_mb | 新增 |
| — | 移除block_cache_max_parcel_memory_mb |
| — | 移除block_cache_report_stats |
| — | 移除block_cache_lru_insertion_point |
在源码 be/src/common/config.h 中可以看到 Data Cache 参数的真实默认值及与旧参数的别名映射:
CONF_Bool(datacache_enable, "true"); CONF_mString(datacache_mem_size, "20%"); CONF_mString(datacache_disk_size, "100%"); CONF_Int64(datacache_block_size, "262144"); // 256K CONF_Bool(datacache_checksum_enable, "false"); CONF_Bool(datacache_direct_io_enable, "false"); CONF_Int64(datacache_max_concurrent_inserts, "1500000"); CONF_Int64(datacache_max_flying_memory_mb, "2"); CONF_Alias(datacache_block_size, block_cache_block_size); CONF_Alias(datacache_max_concurrent_inserts, block_cache_max_concurrent_inserts); CONF_Alias(datacache_checksum_enable, block_cache_checksum_enable); CONF_Alias(datacache_direct_io_enable, block_cache_direct_io_enable);datacache_disk_path的解析逻辑位于 be/src/cache/datacache_utils.cpp 的DataCacheUtils::parse_conf_datacache_disk_paths,解析失败时会返回Status::InvalidArgument并记录警告日志。
3.2.0 还新增了两个相关能力:Data Cache 在多个本地磁盘间均匀分布;3.2.7 支持异步填充 Data Cache,降低缓存填充对查询性能的影响。3.2.3 起 BE/CN 配置项starlet_use_star_cache默认改为true,即共享数据集群默认启用 Data Cache;若升级前手动设置了starlet_cache_evict_high_water = X,则升级后必须将starlet_star_cache_disk_size_percent设为(1.0 - X) * 100(例如X = 0.3时设为70),确保文件数据缓存与 Data Cache 都不超过磁盘容量上限。
8.2 会话变量重命名
enable_scan_block_cache更名为enable_scan_datacache;enable_populate_block_cache更名为enable_populate_datacache。
8.3 3.2.0 新增/移除的 BE 参数
新增:
spill_max_dir_bytes_ratio(默认0.8,见 config.h):落盘目录字节数比例上限;streaming_agg_limited_memory_size(默认134217728字节即 128MB,见 config.h):流式聚合受限内存大小;streaming_agg_chunk_buffer_size(默认1024,见 config.h):流式聚合 chunk 缓冲区大小。
移除:
- 动态参数
tc_use_memory_min、tc_free_memory_rate、tc_gc_period; - 静态参数
tc_max_total_thread_cache_byte。
默认值变更:
disable_column_pool:false→true;thrift_port:9060→0;enable_load_colocate_mv:false→true;enable_pindex_minor_compaction:false→true。
8.4 3.2.0 新增/移除/改名的 FE 参数与会话变量
新增 FE 配置项:
catalog_metadata_cache_size(默认500,见 Config.java)enable_backup_materialized_view(默认false,见 Config.java)enable_colocate_mv_index(默认true,见 Config.java)enable_fast_schema_evolution(当前默认true,见 Config.java)json_file_size_limit(默认4294967296即 4GB,见 Config.java)lake_enable_ingest_slowdown(默认true,见 Config.java)lake_ingest_slowdown_threshold(默认100,见 Config.java)lake_ingest_slowdown_ratio(默认0.1,见 Config.java)lake_compaction_score_upper_bound(默认2000,仅在lake_enable_ingest_slowdown=true时生效,见 Config.java)mv_auto_analyze_async(默认true,见 Config.java)primary_key_disk_schedule_time(默认3600秒即 1 小时,见 Config.java)statistic_auto_collect_small_table_rows(默认10000000即 10M 行,见 Config.java)stream_load_task_keep_max_num(默认1000,见 Config.java)stream_load_task_keep_max_second(默认3 * 24 * 3600即 3 天,见 Config.java)
移除:enable_pipeline_load(其字段仍存在于 Config.java,但已不在 3.2 的参数体系中生效)。
新增会话变量:enable_per_bucket_optimize、enable_write_hive_external_table、hive_temp_staging_dir、spill_revocable_max_bytes、thrift_plan_protocol。
移除会话变量:enable_pipeline_query_statistic、enable_deliver_batch_fragments。
保留字:新增OPTIMIZE和PREPARE。
8.5 3.2.3 新增参数与 3.2.15 StarClient 超时参数
3.2.3 新增的配置项还包括:
- FE 配置项
http_worker_threads_num(默认0,若设为负数或0,实际线程数为 CPU 核数的两倍,见 Config.java); - BE 配置项
lake_pk_compaction_max_input_rowsets(共享数据集群主键表 compaction 最大输入 rowset 数,默认500)。
3.2.15 新增三个 StarClient 超时参数:star_client_read_timeout_seconds、star_client_list_timeout_seconds、star_client_write_timeout_seconds。
8.6 3.2.10 加载内存硬限制
3.2.10 新增 BE 内存限制参数load_process_max_memory_hard_limit_ratio:数据加载内存使用超过该限制后,后续加载任务将失败;同时新增 FE 启动脚本对meta目录的检查(目录不存在时自动创建)。
9. 共享数据集群(Shared-data)专项
- 3.2.0:主键表索引持久化到本地磁盘;Data Cache 多本地磁盘均匀分布。
- 3.2.3:
starlet_use_star_cache默认开启 Data Cache(详见 8.1 的配置换算说明)。 - 3.2.4:支持 S3 兼容对象存储的Partitioned Prefix 特性,启用后数据按统一前缀分布到 bucket 下的多个分区(子路径),提升 S3 兼容对象存储数据文件的读写效率;新增
s3_compatible_fs_list参数指定可通过 AWS SDK 访问的 S3 兼容存储,fallback_to_hadoop_fs_list参数指定需通过 HDFS Schema 访问的非 S3 兼容存储(需使用厂商提供的 JAR 包)。 - 3.2.7:优化共享数据集群的垃圾回收(GC)机制,支持对对象存储中的表或分区执行手动 compaction。
- 3.2.10:修复将 v3.3 共享数据集群降级到 v3.2 时,主键表设置
"persistent_index_type" = "CLOUD_NATIVE"导致崩溃的问题;修复共享数据集群中主键表持久化索引的 GC 与线程回收机制在 CN 节点不生效导致废弃数据无法删除的问题(3.2.5 修复)。
10. 升级注意事项(Upgrade Notes)
升级到 3.2 前必须注意两点:
- Random Bucketing 优化默认关闭:如要启用,需在建表时添加
bucket_size属性,系统即可根据集群信息和加载数据量动态调整 tablet 数量。注意:启用后如需回滚到 v3.1 或更早版本,必须先删除启用了该优化的表并手动执行元数据检查点(执行ALTER SYSTEM CREATE IMAGE),否则回滚会失败。 - 非 Pipeline 查询已禁用:从 v3.2.0 起 StarRocks 禁用了非 Pipeline 查询。升级前需在 FE 配置文件fe.conf中全局启用 Pipeline 引擎(添加
enable_pipeline_engine=true),否则非 Pipeline 查询会报错。
3.2.11 还包含一条降级说明:从 v3.3.x 降级到 v3.2.11 时,若存在不兼容元数据,系统会忽略之(PR #49636)。
其他重要行为变更:
- 3.2.1:JDK8 默认 GC 算法升级为 G1;
sql_mode新增GROUP_CONCAT_LEGACY选项兼容 v2.5 之前版本的group_concat实现;Broker Load 中 AWS S3 的aws.s3.access_key与aws.s3.access_secret认证信息在审计日志中隐藏;be_tablets视图新增INDEX_DISK字段记录持久化索引磁盘占用(字节)。 - 3.2.3:LIKE 操作符右侧字符串不含
%或_时自动转换为=运算符;trash 文件默认保留期从 3 天改为 1 天;Routine Load 调度策略优化(慢任务不再阻塞其他正常任务)。 - 3.2.4:物化视图刷新权限改为创建者;
information_schema.partitions_meta视图记录分区详细元数据;sys.fe_memory_usage视图记录内存使用情况。 - 3.2.9:
JAVA_OPTS参数值继承顺序变更,若使用 JDK_9/JDK_11 之外版本需直接配置JAVA_OPTS。 - 3.2.12:支持动态修改 Backup/Restore 相关参数。
11. 监控与系统视图
3.2 版本新增或增强了大量监控与诊断能力:
- 3.2.0:
information_schema.columns视图(3.2.10 支持GENERATION_EXPRESSION字段);Profile 分析命令套件。 - 3.2.1:新指标
max_tablet_rowset_num用于设置 rowset 最大数量上限,帮助提前发现 compaction 问题、减少 "too many versions" 错误;be_tablets视图新增INDEX_DISK字段。 - 3.2.2/3.2.3:
information_schema.be_tablets新增storage_medium字段;Data Cache 相关指标加入监控 API;新增记录统计信息与物化视图日志的内部 SQL 日志文件。 - 3.2.12:从 Follower FE 节点查询
information_schema.routine_load_jobs时优化任务状态展示;新增information_schema.fe_locks视图(3.2.12 修复了访问该视图导致崩溃的问题)。 - 3.2.13:Prometheus 解析含特殊字符名称的物化视图指标失败的问题已修复(物化视图指标现支持 tags)。
- 3.2.14:JSON 指标中纳入节点信息与直方图指标。
- 3.2.3:新增
max_tablet_rowset_num相关 metric 说明的延续——LatestSourcePosition字段加入 SHOW ROUTINE LOAD 返回结果。
12. 从 3.2.1 到 3.2.16:维护版本修复要点速查
| 版本 | 关键新特性/改进 | 关键修复方向 |
|---|---|---|
| 3.2.1 | JNI 读取 Avro/SequenceFile/RCFile;同步物化视图 WHERE 子句;prepared statement;enable_stream_load_verbose_log(默认false,见 config.h) | BE 在数据损坏时创建持久化索引崩溃;array_distinct偶发崩溃;S3 兼容存储返回重复文件导致崩溃 |
| 3.2.2 | — | 从 v3.1.2 及更早版本升级后 FE 重启失败 |
| 3.2.3 | 混合行列存储(Preview);备份恢复异步物化视图;Broker Load 加载 JSON;CREATE OR REPLACE PIPE;大批参数变更 | ANALYZE TABLE 偶发卡住;PageCache 内存超限;bitmap_to_string 结果错误;半结构化数据查询崩溃 |
| 3.2.4(撤回) | 云原生主键表 Size-tiered Compaction;milliseconds_diff;catalog会话变量;information_schema.partitions_meta;Trino 兼容;S3 Partitioned Prefix | 主键表持久化索引导致 I/O 打满;共享数据集群主键索引目录每 5 小时被删除;Publish 阶段重试挂起 |
| 3.2.5(撤回) | dict_mapping列属性 | FILES 类型合并优化;主键表 Size-tiered Compaction;共享数据集群持久化索引 GC 失效;异步物化视图分区范围不连续 |
| 3.2.6 | — | 外部表权限不兼容问题(修复 3.2.4/3.2.5 撤回的原因) |
| 3.2.7 | Stream Load 传输压缩;共享数据集群手动 compaction;Flink connector 读取复杂类型;异步 Data Cache 填充;外部表直方图统计;Lateral Join + UNNEST 支持 LEFT JOIN;基于 Hive 视图创建异步物化视图;query_pool_spill_mem_limit_threshold(默认1.0,见 config.h) | BITMAP 并发读写崩溃;主键索引崩溃;str_to_map 高并发崩溃;Ranger Masking 别名问题;容器环境内存信息错误 |
| 3.2.8 | BE 标签(基于机架/数据中心) | 表达式分区 + str2date 的 DELETE 报错;跨集群迁移工具获取 Schema 失败导致目标集群 BE 崩溃;非确定性函数查询报 "Multiple entries with same key" |
| 3.2.9 | Paimon DELETE Vectors;Ranger 列级访问控制;Stream Load JSON 自动转换复杂类型;JDBC Catalog 支持 Oracle/SQL Server;skip.header.line.count | 共享数据集群升降级相关 BE 崩溃;SUBMIT TASK 状态卡死;SHOW MATERIALIZED VIEWS 空指针;表属性值含空白不生效 |
| 3.2.10 | FILES() JSON 自动转换;columns 视图 GENERATION_EXPRESSION | 共享数据集群降级崩溃;OUTFILE 导出 CSV 数据不一致;Plan 阶段超时挂起;page_off 数组越界;ADD/DROP COLUMN 并发崩溃;aarch64 负 TINYINT 查询;partition_line_number不生效;CTE distinct grouping sets 非法计划 |
| 3.2.11 | FILES()/PIPE 认证信息掩码;Parquet STRUCT 自动推断 | 全局字典改写 equi-join 报错;Tablet Clone 无限循环;统计日志报错;Parquet TIMESTAMP 时区错误 |
| 3.2.12 | BE 内存优化防 OOM;FE Schema Change 内存优化;List 分区表备份恢复;动态修改备份恢复参数 | Hive 写入失败错误信息丢失;array_map 常量参数过多崩溃;表达式分区特殊字符导致 FE CheckPoint 失败;fe_locks 视图崩溃;生成列查询报错;表名含特殊字符时 OPTIMIZE 失败 |
| 3.2.13 | 指定表禁止 Base Compaction 时间范围 | SHOW ROUTINE LOADloadRowsRate为 0;FILES() 读取未查询列;Prometheus 物化视图指标解析失败;array_map 崩溃;元数据缓存崩溃;Routine Load 误取消;HTTP 1.0 Stream Load 失败;Glue/S3 集成错误信息 |
| 3.2.14 | Paimon 表统计信息收集;JSON 指标含节点信息与直方图 | 主键表索引 Commit 阶段分数未更新;低基数优化下max(count(distinct))执行计划错误;List 分区 NULL 值裁剪错误;HDFS 备份上传重试失败 |
| 3.2.15 | 窗口函数max_by/min_by;StarClient 超时参数;List 分区 DELETE 裁剪 | Stream Load 调度到非 Alive 节点失败;主键表部分更新报错;BE 重启后 bRPC 错误持续 |
| 3.2.16 | Stream Load BE 节点黑名单 | 建 tablet 超时;files() 建视图丢失认证信息;优化器空集常量比较错误;预聚合溢出崩溃;删除基表分区后关联物化视图删除失败;主键表 Tablet 加载优先级缺陷致数据丢失 |
13. 总结与升级建议
StarRocks 3.2 是连接"本地数仓"与"数据湖"能力的关键版本:Unified Catalog 让一个集群统一访问 Hive/Iceberg/Hudi/Delta Lake 四种表格式;主键表持久化索引落盘与同步 Publish 显著改善了实时更新场景的稳定性与可见性;Data Cache 参数体系的重构为后续版本的数据缓存演进奠定了基础。对于计划升级到 3.2 的用户,请务必按第 10 节的升级注意事项操作(全局开启 Pipeline 引擎、理解 Random Bucketing 优化约束、完成block_cache→datacache参数迁移),并注意 3.2.4/3.2.5 已被撤回,应直接选用 3.2.6 及以上版本。更多细节可参考仓库中的 发布说明原文、BE 配置定义 be/src/common/config.h 与 FE 配置定义 fe/fe-core/src/main/java/com/starrocks/common/Config.java。
【免费下载链接】starrocksThe world's fastest open query engine for sub-second analytics both on and off the data lakehouse. With the flexibility to support nearly any scenario, StarRocks provides best-in-class performance for multi-dimensional analytics, real-time analytics, and ad-hoc queries. A Linux Foundation project.项目地址: https://gitcode.com/GitHub_Trending/st/starrocks
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考