StarRocks 3.0 新特性介绍
本文发表于: &{ new Date(1680796800000).toLocaleDateString() }
#01 StarRocks 3.0 版本介绍
StarRocks 3.0 版本是 StarRocks 发展历程中的一个重要里程碑,经过两年多的发展,StarRocks 发布了超过 80 个版本,回顾过去:
在 1.x 版本中,StarRocks 的发展主线是性能优化,通过向量化执行引擎、CBO、全局低基数字典等特性,在行业中树立了性能标杆。
在 2.x 版本中,StarRocks 针对实时和数据湖分析场景做了深入的打磨,Primary Key 模型解决实时场景下宽表的更新和查询性能问题;StarRocks 支持了Apache Iceberg/ Apache Hudi/Delta Lake 等数据湖外表查询;此外,基于Pipeline引擎的资源组功能可以帮助用户进行细粒度的资源管控,隔离不同类型负载的资源使用,帮助用户实现 OLAP 层的极速统一。
在 3.x 版本中,StarRocks 将开启从 OLAP 到 Lakehouse 演进的新篇章。通过全新的存算分离架构,帮助用户降低存储成本,提升计算弹性,通过物化视图来实现湖仓融合、流批一体的 ELT 流程,最终实现在开放的湖仓架构下比数仓更好的性能和时效性。
#02 新增核心功能介绍
1.存算分离
StarRocks 3.0 版本最重要的变化是架构上支持了存算分离模式。在该模式下数据将会持久存储在远程对象存储或 HDFS 上,而将本地磁盘作为缓存使用。存算分离架构下用户可以动态添加或删除计算节点,实现秒级的扩缩容能力,并支持表级别的缓存生命周期管理;在本地缓存命中的情况下,可以获得与存算一体架构相同的性能。
2.全新 RBAC 权限框架
新版本提供了完整的 RBAC(Role-based Access Control) 权限管理支持,在兼容之前的 IBAC(Identity-based Access Control) 模型基础上,RBAC 模型可以通过角色来管理一组对象权限,然后把权限赋给对应的用户,这样极大降低授权的管理成本,也可以更灵活方便的修改/回收权限。
您可以通过 StarRocks的预制角色db_admin, cluster_admin, user_admin, public 给系统管理员配置基础的权限模版。也可以自定义角色,并通过角色的继承来满足不同组织结构的需求。同时,StarRocks 支持了默认激活角色(Default Role),在用户拥有多个角色时,推荐默认激活最小角色,如遇特殊场景,手动激活高级角色,从而实现最小权限原则,防止误用。
3.0 版本新增了 40+ 种权限项,覆盖了物化视图,资源组,UDF 等多种对象,也支持了对 External catalog 进行统一的权限管理,可以像管理内部表一样管理外表的各类权限。
3.物化视图增强
3.0 版本在物化视图方向进一步增强了离线场景能力,通过预计算来提升查询并发,降低延迟。
在物化视图构建方面,支持了 CTE、SELECT * 、UNION 算子; 在可观测性上,优化了 show materialized view 的信息展示,让物化视图的构建过程更清晰;在查询改写上,针对多表关联,包括支持 cross join、outer join 和 delta join 的查询改写;在物化视图刷新上,支持对 Hive catalog 的分区数据变化感知来自动进行分区级别刷新。
4.Trino 方言兼容
[Preview] 对于数据湖分析场景,StarRocks 3.0 提供了支持 Trino SQL 查询兼容的预览版,可以将 Presto/Trino 的 SQL 自动重写为 StarRocks 的 SQL,兼容层会针对 Trino 的函数,语法做相应的调整,配合 Multi-catalog 的功能,只需要创建一次 Catalog,就可以将 Trino 查询无缝切换,感受极速数据湖分析体验。
5.Primary Key 支持更丰富的 Update/Delete 语法
Primary Key 在 2.x 版本中已经逐渐打磨成熟,但更新的语法还是以导入的模式进行 Upsert 操作为主,在 3.0 版本中支持了更丰富的 update/delete 语法,包括使用 CTE(Common table expression) 和多表的引用。例如你可以通过一个 with 语句计算出子查询结果,然后选择其中的部分列来更新到另一张表中,这种通用 Update 语句可以让替换 Oracle 等传统数据库变得更加容易。
6.导入自动创建分区
为了提升分区创建的易用性和灵活性,StarRocks 自 3.0 版本起支持分区表达式和导入自动创建分区的功能。您只需要在包含时间函数的分区表达式中,指定一个 DATE 或者 DATETIME 类型的分区列,以及指定分区粒度(年、月、日或小时)。借助这种使用表达式(date_trunc/time_slice)分区方式,您不需要预先创建出大量分区,StarRocks 会在写入新数据时根据实际数据自动创建对应分区。
7.其他优化
- [Preview] 支持算子落盘,解决因为内存不足导致的大查询失败问题,支持聚合,关联和排序操作。
- 支持 AUTO_INCREMENT 自增列功能,自动生成表内全局唯一 ID。
- [Preview] 支持 JDBC Catalog。
- Query Cache 支持更多查询场景,包括各种 bucket-shuffle/broadcast 等 join 场景。
- 动态自适应并行度,可以根据查询并发自适应调节 pipeline_dop。
- 导入支持更丰富的 CSV 格式参数,包括 skip_header、trim_space、enclose 和 escape。
- Primary Key 模型表支持单独指定排序键,加速非主键的查询。
- 完善大查询定位能力,通过 show proc '/current_queries/' 命令可以查看当前查询的 CPU 内存使用情况,增加大查询日志。
- 优化 SQL 解析阶段的报错信息,让查询的报错位置更明确,报错更清晰。
8.相关链接
- Release Notes 3.0 :https://docs.starrocks.io/zh-cn/main/release_notes/release-3.0
- 存算分离:https://docs.starrocks.io/zh-cn/3.0/administration/deploy_shared_data
- 全新 RBAC 权限框架:https://docs.starrocks.io/zh-cn/3.0/administration/privilege_overview
- 物化视图增强:https://docs.starrocks.io/zh-cn/3.0/using_starrocks/Materialized_view
- Primary key 支持更丰富的 Update/Delete 语法:
- Update:https://docs.starrocks.io/zh-cn/3.0/sql-reference/sql-statements/data-manipulation/UPDATE
- Delete:https://docs.starrocks.io/zh-cn/3.0/sql-reference/sql-statements/data-manipulation/DELETE
- 自动创建分区:https://docs.starrocks.io/zh-cn/3.0/table_design/automatic_partitioning