StarRocks version 3.3
升级至 v3.3 后,请勿直接将集群降级至 v3.2.0、v3.2.1 或 v3.2.2,否则会导致元数据丢失。您必须降级到 v3.2.3 或更高版本以避免出现此问题。
3.3.3
发布日期:2024 年 9 月 5 日
新增功能
- 支持设置用户级别变量。#48477
- 支持了 Delta Lake Catalog 的元数据缓存、元数据手动刷新以及周期性刷新策略。#46526 #49069
- 支持导入 Parquet 文件的 JSON 类型。#49385
- JDBC SQL Server Catalog 支持 LIMIT 查询。#48248
- 存算分离集群支持通过 INSERT INTO 执行部分列更新。#49336
功能优化
- 优化导入报错信息:
- 优化导入时的分区机制,降低初始阶段的内存占用。#47976
- 优化存算一体集群的内存占用问题。增加元数据内存占用限制,避免在 Tablet、Segment 文件过多时可能引发的问题。#49170
- 优化了
max(partition_column)
的查询性能。#49391 - 如果分区 列是生成列(即基于表中某个原生列计算所得),且查询的谓词过滤条件包含原生列,则可以使用分区裁剪优化查询性能。 #48692
- 对 Files()、PIPE 相关操作中的敏感信息进行脱敏。#47629
- 提供新的命令
SHOW PROC '/global_current_queries'
,用以查看在所有 FE 节点上运行的查询。而相对应的命令SHOW PROC '/current_queries'
只能查看当前连接的 FE 节点上运行的查询。#49826
问题修复
- 在通过 StarRocks 外表将数据导出至目标集群时,系统将源集群 BE 误添加到当前集群。#49323
- aarch64 类机器上部署的 StarRocks 集群在通过
select * from files
读取 ORC 文件时,TINYINT 数据类型返回 NULL。#49517 - Stream Load 导入包含大 Integer 类型的 JSON 格式文件失败。 #49927
- Files() 导入 CSV 文件时,对非可见字符的错误处理而导致的 Schema 获取错误。#49718
- 多列分区表替换临时产生的分区错误。 #49764
行为变更
- 为了更好的适应向云上对象存储备份的场景,引入新的参数
object_storage_rename_file_request_timeout_ms
。系统会优先使用该参数作为备份的超时时间。默认为 30 秒。 #49706 to_json
、CAST(AS MAP)
以及STRUCT AS JSON
时,默认转换失败不报错,返回为 NULL。您可以通过设置系统变量sql_mode
为ALLOW_THROW_EXCEPTION
来使查询允许报错。#50157
3.3.2
发布日期:2024 年 8 月 8 日
新增功能
-
支持重命名 StarRocks 内表的列。#47851
-
支持读取 Iceberg 的视图(View)。目前仅支持读取通过 StarRocks 创建的视图。#46273
-
[Experimental] 支持 STRUCT 类型数据增减子列。#46452
-
支持在建表时指定 ZSTD 压缩格式的压缩级别。 #46839
-
增加以下 FE 动态参数以限制表的边界。#47896
包括 :
auto_partition_max_creation_number_per_load
max_partition_number_per_table
max_bucket_number_per_partition
max_column_number_per_table
-
支持在线优化表数据分布,确保优化任务与针对该表的 DML 运行不冲突。#43747
-
支持全局 Data Cache 命中率可观测性接口。 #48450
-
支持函数 array_repeat。 #47862
功能优化
- 优化因 Kafka 鉴权失败而导致的 Routine Load 失败的报错信息。#46136 #47649
- Stream Load 支持将
\t
和\n
分别作为行列分割符,无需转成对应的十六进制 ASCII 码。#47302 - 优化 写入算子的的异步统计信息收集方式,解决导入任务较多时延迟变高的问题。#48162
- 增加以下 BE 动态参数以控制导入过程中的资源硬限制,从而降低写入大量 Tablet 时对 BE 稳定性的影响。#48495
包括:
-
load_process_max_memory_hard_limit_ratio
-
enable_new_load_on_memory_limit_exceeded
-
增加同一表内 Column ID 的一致性检查,防止引起 Compaction 错误。#48498
-
持久化 PIPE 元数据,防止因 FE 重启而导致元数据丢失。#48852
问题修复
- 在 FE Follower 上创建字典时进程无法结束。 #47802
- SHOW PARTITIONS 命令在存算分离集群和存算一体集群中返回的信息不一致。#48647
- 从 JSON 类型的子列导入至
ARRAY<BOOLERAN>
类型列时,因类型处理错误而导致的数据错误。#48387 information_schema.task_runs
中的query_id
列无法查询。#48876- 备份时针对同一操作的多份请求会提交给不同 Broker,导致请求报错。#48856
- 降级至 v3.1.11、v3.2.4 之前的版本,导致主键表的索引解压失败,进而导致查询报错。#48659
降级说明
如果您已经使用列重命名功能,在您降级到旧版本前,请您将所有列的名字改回历史名字,以防降级出现问题。您可以通过 Audit Log 来查看自升级以来是否出现 ALTER TABLE RENAME COLUMN
相关操作,并找到历史名称。
3.3.1(已下线)
发布日期:2024 年 7 月 18 日
此版本因存在主键模型表升级兼容性问题已经下线。
- 问题:从 3.1.11、3.2.4 之前的版本升级至 3.3.1 时,查询主键模型表时,索引解压失败,导致查询报错。
- 影响范围:对于不涉及主键模型表的查询,不受影响。
- 临时解决方法:请回滚至 3.3.0 及以下版本规避此问题,此问题会在 3.3.2 版本中解决。
新增特性
- [Preview] 支持临时表。
- [Preview] JDBC Catalog 支持 Oracle 和 SQL Server。
- [Preview] Unified Catalog 支持 Kudu。
- INSERT INTO 导入主键表,支持通过指定 Column List 实现部分列更新。
- 用户自定义变量支持 ARRAY 类型。 #42631
- Stream Load 支持将 JSON 类型转化并导入至 STRUCT/MAP/ARRAY 类型目标列。 #45406
- 支持全局字典 Cache。
- 支持批量删除分区。#44744
- 支持在 Apache Ranger 中设置列级别权限(物化视图和视图的列级别权限需要在表对象下设置)。 #47702
- 存算分离主键模型表支持列模式部份更新。#46516
- Stream Load 支持在传输过程中对数据进行压缩,减少网络带宽开销。可以通过
compression
或Content-Encoding
参数指定不同的压缩方式,支持 GZIP、BZIP2、LZ4_FRAME、ZSTD 压缩算法。#43732
功能优化
- 优化当前 IdChain 的 hashcode 实现,降低 FE 启动耗时。 #47599
- 优化 FILES() 函数中
csv.trim_space
参数的报错信息,检查非法字符并给出合理提示。 #44740 - Stream Load 支持将
\t
和\n
分别作为行列分割符,无需转成对应的十六进制 ASCII 码。#47302
问题修复
修复了如下问题:
- 在 Schema Change 过程中,因 Tablet 迁移,文件位置变化导致的 Schema Change 失败。#45517
- 因为字段默认值中包含
\
、\r
等控制字符导致跨集群迁移工具在目标集群中建表失败。 #47861 - BE 重启后 bRPC 持续失败。 #40229
user_admin
角色可以通过 ALTER USER 命令修改 root 密码。#47801- 主键索引写入失败,导致数据写入报错。#48045
行为变更
- 写出 Hive、Iceberg 默认打开 Spill。 #47118
- 修改 BE 配置项
max_cumulative_compaction_num_singleton_deltas
默认值为500
。#47621 - 用户创建分区表但未设置分桶数时,当分区数量超过 5 个后,系统自动设置分桶数的规则更改为
max(2 * BE 或 CN 数量, 根据最大历史分区数据量计算得出的分桶数)
。(原来的规则是根据最大历史分区数据量计算的分桶数)。#47949 - INSERT INTO 导入主键表时指定 Column List 会执行部分列更新。先前版本中,指定 Column List 仍然导致 Full Upsert。
降级说明
如需将 v3.3.1 及以上集群降级至 v3.2,用户需要在回滚前清理所有的临时表。步骤如下:
-
禁止用户创建新的临时表:
ADMIN SET FRONTEND CONFIG("enable_experimental_temporary_table"="false");
-
查询系统内是否存在临时表:
SELECT * FROM information_schema.temp_tables;
-
如系统内存在临时表,通过以下命令清理系统内的临时表(需要 SYSTEM 级 OPERATE 权限):
CLEAN TEMPORARY TABLE ON SESSION 'session';
3.3.0
发布日期:2024 年 6 月 21 日
功能及优化
存算分离
-
优化了存算分离集群的 Fast Schema Evolution 能力,DDL 变更降低到秒级别。具体信息,参考 设置 Fast Schema Evolution。
-
为了满足从存算一体到存算分离架构的数据迁移需求,社区正式发布 StarRocks 数据迁移工具。该工具同样可用于实现存算一体集群之间的数据同步和容灾方案。
-
[Preview] 存算分离集群存储卷适配 AWS Express One Zone Storage,提升数倍读写性能。具体信息,参考 CREATE STORAGE VOLUME。
-
优化了存算分离集群的垃圾回收机制,支持手动 Manual Compaction,可以更高效的回收对象存储上的数据。具体信息,参考 手动 Compaction。
-
优化存算分离集群下主键表的 Compaction 事务 Publish 执行逻辑,通过避免读取主键索引,降低执行过程中的 I/O 和内存开销。
-
存算分离集群支持 Tablet 内并行 Scan,优化在建表时 Bucket 较少场景下,查询的并行度受限于 Tablet 数量的问题,提升查询性能。用户可以通过设置以下系统变量启用并行 Scan 功能。
SET GLOBAL enable_lake_tablet_internal_parallel = true;
SET GLOBAL tablet_internal_parallel_mode = "force_split";
数据湖分析
- Data Cache 增强:
- 新增 缓存预热 (Warmup) 命令 CACHE SELECT,用于填充查询热点数据,可以结合 SUBMIT TASK 完成周期性填充。该功能同时支持外表和存算分离的内表。
- 增加了多项 Data Cache 可观测性指标。
- Parquet Reader 性能提升:
- 针对 Page Index 的 优化,显著减少 Scan 数据规模。
- 在有 Page Index 的情况下,降低 Page 多读的情况。
- 使用 SIMD 加速计算判断数据行是否为空。
- ORC Reader 性能提升:
- 使用 Column ID 下推谓词,从而支持读取 Schema Change 后的 ORC 文件。
- 优化 ORC Tiny Stripe 处理逻辑。
- Iceberg 文件格式能力升级:
- 大幅提升 Iceberg Catalog 的元数据访问性能,重构并行 Scan 逻辑,解决了 Iceberg 原生 SDK 在处理大量元数据文件时的单线程 I/O 瓶颈,在执行有元数据瓶颈的查询时带来 10 倍以上的性能提升。
- Parquet 格式的 Iceberg v2 表查询支持 equality-delete。
- [Experimental] Paimon Catalog 优化:
- 基于 Paimon 外表创建的物化视图支持自动查询改写。
- 优化针对 Paimon Catalog 查询的 Scan Range 调度,提高 I/O 并发。
- 支持查询 Paimon 系统表。
- Paimon 外表支持 DELETE Vector,以提升更新删除场景下的查询效率。
- 外表统计信息收集优化:
- ANALYZE TABLE 命令支持收集直方图统计信息,可以有效应对数据倾斜场景。
- 支持 STRUCT 子列统计信息收集。
- 数据湖格式写入性能提升:
- Sink 算子性能比 Trino 提高一倍。
- Hive 及 INSERT INTO FILES 新增支持 Textfile 和 ORC 格式数据的写入。
- [Preview] 支持 Alibaba Cloud MaxCompute catalog,不需要执行数据导入即可查询 MaxCompute 里的数据,还可以结合 INSERT INTO 能力实现数据转换和导入。
- [Experimental] 支持 ClickHouse Catalog。
- [Experimental] 支持 Kudu Catalog。
性能提升和查询优化
-
ARM 性能优化:
针对 ARM 架构指令集大幅优化性能。在使用 AWS Gravinton 机型测试的情况下,在 SSB 100G 测试中,使用 ARM 架构时的性能比 x86 快 11%;在 Clickbench 测试中,使用 ARM 架构时的性能比 x86 快 39%,在 TPC-H 100G 测试中,使用 ARM 架构时的性能比 x86 快 13%,在 TPC-DS 100G 测试中,使用 ARM 架构时的性能比 x86 快 35%。
-
中间结果落盘(Spill to Disk)能力 GA:优化复杂查询的内存占用,优化 Spill 的调度,保证大查询都能稳定执行,不会 OOM。
-
[Preview] 支持将中间结果 落盘至对象存储。
-
支持更多索引:
- [Preview] 支持全文倒排索引,以加速全文检索。
- [Preview] 支持 N-Gram bloom filter 索引,以加速
LIKE
查询或ngram_search
和ngram_search_case_insensitive
函数的运算速度。
-
提升 Bitmap 系列函数的性能并优化内存占用,补充了 Bitmap 导出到 Hive 的能力以及配套的 Hive Bitmap UDF。
-
[Preview] 支持 Flat JSON:导入时自动检测 JSON 数据并提取公共字段,自动创建 JSON 的列式存储结构,JSON 查询性能达到 Struct 的水平。
-
[Preview] 优化全局字典:提供字典对象,将字典表中的键值对映射关系存在各个 BE 节点的内存中。通过
dictionary_get()
函数直接查询 BE 内存中的字典对象,相对于原先使用dict_mapping
函数查询字典表,查询速度更快。并且字典对象还可以作为维度表,可以通过dictionary_get()
函数直接查询字典对象来获取维度值,相对于原先通过 JOIN 维度表来获取维度值,查询速度更快。 -
[Preview] 支持 Colocate Group Execution: 大幅降低在 colocated 表上执行 Join 和 Agg 算子时的内存占用,能够更稳定的执行大查询。
-
优化 CodeGen 性能:默认打开 JIT,在复杂表达式计算场景下性能提升 5 倍。
-
支持使用向量化技术来进行正则表达式匹配,可以降低
regexp_replace
函数计算的 CPU 消耗。 -
优化 Broadcast Join,在右表为空时可以提前结束 Join 操作。
-
优化数据倾斜情况下的 Shuffle Join,避免 OOM。
-
聚合查询包含
Limit
时,多 Pipeline 线程可以共享 Limit 条件从而防止计算资源浪费。
存储优化与集群管理
- 增强 Range 分区的灵活性:新增支持三个特定时间函数作为分区列,可以将时间戳或字符串的分区列值转成日期,然后按转换后的日期划分分区。
- FE 内存可观测性:提供 FE 内各模块的详细内存使用指标,以便更好地管理资源。
- 优化 FE 中的元数据锁:提供 Lock Manager,可以对 FE 中的元数据锁实现集中管理,例如将元数据锁的粒度从库级别细化为表级别,可以提高导入和查询的并发性能。在 100 并发小数据量导入场景下,导入耗时减少 35%。
- 使用标签管理 BE:支持基于 BE 节点所在机架、数据中心等信息,使用标签对 BE 节点进行分组,以保证数据在机架或数据中心等之间均匀分布,应对某些机架断电或数据中心故障情况下的灾备需求。