异步物化视图
本文介绍如何理解、创建、使用和管理 StarRocks 中的异步物化视图。StarRocks 自 2.4 版本起支持异步物化视图。
相较于同步物化视图,异步物化视图支持多表关联以及更加丰富的聚合算子。异步物化视图可以通过手动调用或定时任务的方式刷新,并且支持刷新部分分区,可以大幅降低刷新成本。除此之外,异步物化视图支持多种查询改写场景,实现自动、透明查询加速。
有关同步物化视图(Rollup)的场景和使用,参见同步物化视图(Rollup)。
背景介绍
数据仓库环境中的应用程序经常基于多个大表执行复杂查询,通常涉及多表之间数十亿行数据的关联和聚合。处理此类查询通常会大量消耗系统资源和时间,造成极高的查询成本。
您可以通过 StarRocks 中的异步物化视图解决以上问题。异步物化视图 是一种特殊的物理表,其中存储了基于基表特定查询语句的预计算结果。当您对基表执行复杂查询时,StarRocks 可以直接复用预计算结果,避免重复计算,进而提高查询性能。查询的频率越高或查询语句越复杂,性能增益就会越很明显。
您还可以通过异步物化视图对数据仓库进行建模,从而向上层应用提供统一的数据口径,屏蔽底层实现,保护基表明细数据安全。
理解 StarRocks 物化视图
StarRocks v2.4 之前的版本提供了一种同步更新的同步物化视图(Rollup),可以提供更好的数据新鲜度和更低的刷新成本。但是同步物化视图在场景上有诸多限制,只可基于单一基表创建,且仅支持有限的聚合算子。v2.4 版本之后支持异步物化视图,可以基于多个基表创建,且支持更丰富的聚合算子。
下表从支持的特性角度比较了 StarRocks 中的异步物化视图以及同步物化视图(Rollup):
单表聚合 | 多表关联 | 查询改写 | 刷新策略 | 基表 | |
---|---|---|---|---|---|
异步物化视图 | 是 | 是 | 是 |
| 支持多表构建。基表可以来自:
|
同步物化视图(Rollup) | 仅部分聚合函数 | 否 | 是 | 导入同步刷新 | 仅支持基于 Default Catalog 的单表构建 |
相关概念
-
基表(Base Table)
物化视图的驱动表。
对于 StarRocks 的异步物化视图,基表可以是 Default catalog 中的内部表、外部数据目录中的表(自 2.5 版本起支持),甚至是已有的异步物化视图(自 v2.5 起支持)或视图(自 v3.1 起支持)。StarRocks 支持在所有 StarRocks 表类型 上创建异步物化视图。
-
刷新(Refresh)
创建异步物化视图后,其中的数据仅反映创建时刻基表的状态。当基表中的数据发生变化时,需要通过刷新异步物化视图更新数据变化。
目前 StarRocks 支持两种异步刷新策略:
- ASYNC:异步刷新,每当基表中的数据发生变化时,物化视图根据指定的刷新间隔自动触发刷新任务。
- MANUAL:手动触发刷新。物化视图不会自动刷新,需要用户手动维护刷新任务。
-
查询改写(Query Rewrite)
查询改写是指在对已构建了物化视图的基表进行查询时,系统自动判断是否可以复用物化视图中的预计算结果处理查询。如果可以复用,系统会直接从相关的物化视图读取预计算结果,以避免重复计算消耗系统资源和时间。
自 v2.5 版本起,StarRocks 支持基于 SPJG 类型异步物化视图的自动、透明查询改写。SPJG 类型的物化视图是指在物化视图 Plan 中只包含 Scan、Filter、Project 以及 Aggregate 类型的算子。
说明
基于 JDBC Catalog 和 Hudi Catalog 表构建的异步物化视图暂不支持查询改写。
使用场景
如果您的数据仓库环境中有以下需求,我们建议您创建异步物化视图:
-
加速重复聚合查询
假设您的数仓环境中存在大量包含相同聚合函数子查询的查询,占用了大量计算资源,您可以根据该子查询建立异步物化视图,计算并保存该子查询的所有结果。建立成功后,系统将自动改写查询语句,直接查询异步物化视图中的中间结果,从而降低负载,加速查询。
-
周期性多表关联查询
假设您需要定期将数据仓库中多张表关联,生成一张新的宽表,您可以为这些表建立异步物化视图,并设定定期刷新规则,从而避免手动调度关联任务。异步物化视图建立成功后,查询将直接基于异步物化视图返回结果,从而避免关联操作带来的延迟。
-
数仓分层
假设您的基表中包含大量原始数据,查询需要进行复杂的 ETL 操作,您可以通过对数据建立多层异步物化视图实现数仓分层。如此可以将复杂查询分解为多层简单查询,既可以减少重复计算,又能够帮助维护人员快速定位问题。除此之外,数仓分层还可以将原始数据与统计数据解耦,从而保护敏感性原始数据。
-
湖仓加速
查询数据湖可能由于网络延迟和对象存储的吞吐限制而变慢。您可以通过在数据湖之上构建异步物化视图来提升查询性能。此外,StarRocks 可以智能改写查询以使用现有的物化视图,省去了手动修改查询的麻烦。