StarRocks 3.0 新特性介绍

镜舟数据库 Mirrorship 是 StarRocks 开源软件的商业版,致力于打造极速统一的湖仓新范式。对比开源版,商业版新增了部分功能,如您对商业版感兴趣,可点击下方联系我们按钮进行留言。

 

联系我们

本文发表于: &{ new Date(1680796800000).toLocaleDateString() }

镜舟数据库 Mirrorship 是 StarRocks 开源软件的商业版,致力于打造极速统一的湖仓新范式。对比开源版,商业版新增了部分功能,如您对商业版感兴趣,可点击右侧联系我们按钮进行留言。

#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 其他优化

  1. [Preview] 支持算子落盘,解决因为内存不足导致的大查询失败问题,支持聚合,关联和排序操作。
  2. 支持 AUTO_INCREMENT 自增列功能,自动生成表内全局唯一 ID。
  3. [Preview] 支持 JDBC Catalog。
  4. Query Cache 支持更多查询场景,包括各种 bucket-shuffle/broadcast 等 join 场景。
  5. 动态自适应并行度,可以根据查询并发自适应调节 pipeline_dop。
  6. 导入支持更丰富的 CSV 格式参数,包括 skip_header、trim_space、enclose 和 escape。
  7. Primary Key 模型表支持单独指定排序键,加速非主键的查询。
  8. 完善大查询定位能力,通过 show proc '/current_queries/' 命令可以查看当前查询的 CPU 内存使用情况,增加大查询日志。
  9. 优化 SQL 解析阶段的报错信息,让查询的报错位置更明确,报错更清晰。

 

 

8 相关链接

 


在这个版本中,115 位贡献者 一共提交了 2065 个 commits,感谢他们:

@evelynzhaojie, @srlch, @satanson, @amber-create, @trueeyu, @Youngwb, @stdpain, @HangyuanLiu, @Seaven, @sduzh, @LiShuMing, @mofeiatwork, @huangfeng1993, @rickif, @fzhedu, @banmoy, @silverbullet233, @dirtysalt, @Astralidea, @sevev, @wyb, @andyziye, @wxl24life, @kevincai, @xiaoyong-z, @decster, @TszKitLo40, @EsoragotoSpirit, @GavinMar, @dengliu, @Smith-Cruise, @meegoo, @choury, @luohaha, @nshangyiming, @ABingHuang, @sfwang218, @stephen-shelby, @zombee0, @zaorangyang, @leoyy0316, @xiangguangyxg, @wanpengfei-git, @gengjun-git, @packy92, @hellolilyliuyi, @miomiocat, @blackstar-baba, @chaoyli, @ldsink, @wangsimo0, @letian-jiang, @fieldsfarmer, @starrocks-xupeng, @agubichev, @liuyehcf, @abc982627271, @kangkaisen, @tracymacding, @ZiheLiu, @zuyu, @imay, @shshenhua, @goldenbean, @wangruin, @yangrong688, @bestolap, @caneGuy, @QingdongZeng3, @ss892714028, @marszd, @before-Sunrise, @ruyliu, @shileifu, @Vision0220, @alvin-coding, @titianqx, @Linkerist, @motto1314, @smartlxh, @wanweiqiangintel, @mchades, @kateshaowanjou, @zhangweiwhim, @beanflower-bs, @DorianZheng, @creatstar, @andy-olap, @Knight0xffff, @cbcbq, @waittttting, @wuyunfeng, @jyz0309, @hffariel, @leeLeft, @jaogoy, @xlfjcg, @yingtingdong, @anishone, @jiacheng-celonis, @emergenz, @femiiii, @tomscut, @Pslydhh, @sparklezzz, @haiboself, @cxzl25, @JackeyLee007, @dulong41, @ucasfl, @bryanck, @fulghum, @hongli-my, @padmejin