小编导读:
本文将重点介绍如何利用物化视图进行查询改写。文章将全面介绍物化视图的基本原理、关键特性、应用案例、使用场景、代码细节以及主流大数据产品的物化视图改写能力对比。
物化视图在 StarRocks 中扮演着至关重要的角色,它是进行数据建模和加速查询的神器。特别是在 BI 场景中,通过预先计算 Join 和 Aggregation 操作,物化视图不仅能大幅度提升查询性能,还能显著降低存储成本。
使用物化视图通常包含以下三个阶段:
-
设计与创建:首先,我们需要仔细分析查询的特点,以选择构建最适合的物化视图。
-
视图维护:当基础表的数据发生变化时,物化视图也需要及时更新,以确保数据的一致性。
-
查询改写:利用预计算的数据,物化视图能有效地加速查询处理过程,提供更快的响应速度。

本文重点讨论物化视图的第三阶段:如何利用物化视图进行查询改写。StarRocks 的异步物化视图采用了广泛认可的 SPJG(Select-Projection-Join-Groupby)算法。这允许系统在用户无需修改任何查询的前提下,自动将原始查询转换为对物化视图的查询。借助物化视图中预计算的结果,这种自动化的查询改写大幅降低了计算代价,从而实现了显著的查询加速。
在典型的 OLAP 标准测试集中, 通过创建物化视图可以显著提升查询性能:
-
SSB 100GB:与传统的星形模型相比,物化视图能将总体查询耗时减少至原来的 1/3。
-
TPC-H 100GB:这种技术能加速一半的查询,平均耗时降至原来的 1/5。

基本原理

(StarRocks 物化视图改写流程)
物化视图改写的关键流程如上图所示,整体上可以划分为以下三个阶段:
-
预处理:在 Analyzer 处理后得到的逻辑计划树的基础上,系统会识别出相关的物化视图候选集。此阶段还包括过滤掉无法用于改写的物化视图,以缩小搜索空间并确保物化视图数据的新鲜度。
-
SPJG 物化视图改写:应用基于cost-based的 SPJG 物化视图改写规则,自动遍历搜索空间中可用于改写的子树,并尝试进行改写,并且最终会根据 Cost Model 选择最优的改写方案。
-
后处理:对物化视图改写后的 Plan 执行列裁剪、谓词下推、分区裁剪等优化操作,以提升改写后 Plan 的执行性能。
举例说明,对于一条具体的查询,物化视图的改写可以分为以下几个步骤处理:
-
预处理:
-
分析访问表:首先分析查询涉及的基表, 根据这些基表与物化视图之间的依赖关系,识别可能有用的物化视图
-
候选视图筛选:对于复杂的查询可能存在大量的候选物化视图,直接考虑所有视图会导致计算开销过大。因此,因此,需要根据视图的“适用性”对候选视图进行排序,并选择一个子集进行进一步分析
-
新鲜度验证:检查候选物化视图的数据新鲜度,若物化视图数据不满足查询的要求,则抛弃这些视图
-
TEXT 改写
-
当查询与某个物化视图在 AST tree/语法树结构上完全一致时,可以通过文本匹配直接将查询改写为对该视图的访问
-
SPJG 查询改写
-
SPJG 改写适用于查询与物化视图有所差异的场景,可以对物化视图进行补偿改写,提供了更大的灵活性,但实现上也更为复杂
-
在 SQL 优化器中应用多种规则来匹配视图和查询,对所有可能的 Query Plan 进行改写,这一过程的计算开销相对较高
-
改写后,对于产生的所有可能的改写结果,使用 Cost Model 来评估并选择最优的改写方案
-
后置处理
-
对改写后的查询计划应用更多优化器规则,如列裁剪、谓词下推和分区裁剪等
select sum(lo_revenue) as lo_revenue, d_year, p_brand
from lineorder
join dates on lo_orderdate = d_datekey
join part on lo_partkey = p_partkey
join supplier on lo_suppkey = s_suppkey
where p_category = 'MFGR#12' and s_region = 'AMERICA'
group by d_year, p_brand
order by d_year, p_brand;
关键特性
除核心能力之外,StarRocks 物化视图自动改写还包括以下关键特性:
-
数据一致性:
-
内部表一致性:确保物化视图改写的结果与查询原始表结果完全一致,实现强数据一致性。
-
过期数据处理:支持配置数据过期容忍时间,适应数据频繁变更的场景,通过 staleness 改写技术应对数据变化。
-
复杂查询支持
-
多表 Join 支持:支持各种类型的 join,包括 view delta join 和 join derivability rewrite 等复杂 join 场景的改写,优化大宽表查询。
-
聚合查询加速:通过聚合改写技术加速聚合查询,提升报表查询性能。
-
嵌套视图改写:支持嵌套物化视图改写,解决复杂查询的改写问题,扩展改写范围。
-
复杂表达式支持:够处理包括函数调用和四则运算在内的复杂表达式,满足复杂的分析计算需求
-
实时数据融合
-
新鲜数据查询加速:利用 union 改写和 TTL 功能联合使用,加速新鲜数据查询,并实现历史数据自动回查原表。
-
多数据源支持
-
逻辑视图物化:允许在逻辑视图上创建物化视图,支持基于 view 建模的场景下的查询加速
-
外部表物化视图:支持包括 Hive、Iceberg、Hudi、DeltaLake、Paimon、JDBC(MySQL Dialet)等,提升数据湖场景下的查询性能
应用案例

在携程的 BI 平台中,通过 St

最低0.47元/天 解锁文章
775

被折叠的 条评论
为什么被折叠?



