StarRocks物化视图概述
物化视图是包含一个查询结果的数据库对象,它可以是远端数据的一份本地拷贝,也可以是一个表或一个join结果的行/列的一个子集,还可以是使用聚合函数的一个汇总。相对于普通的逻辑视图,将数据物化后,能提升查询性能。物化视图包含同步物化视图和异步物化视图。
物化视图原理介绍
物化视图的数据组织形式和基表、RollUp表相同。用户可以在新建基表时添加物化视图,也可以对已有表添加物化视图,这种情况下,基表的数据会自动以异步方式填充到物化视图中。基表可以拥有多张物化视图,向基表导入数据时,会同时更新基表的所有物化视图。数据导入操作具有原子性,因此基表和它的物化视图保持数据一致。
物化视图创建成功后,用户原有查询基表的SQL语句保持不变,StarRocks会自动选择一个最优的物化视图,从物化视图中读取数据并计算。用户可以通过EXPLAIN命令检查当前查询是否使用了物化视图。
物化视图中的聚合和查询中聚合的函数对应关系如表1所示。其中bitmap和hll的聚合函数在查询匹配到物化视图后,查询的聚合算子会根据物化视图的表结构进行改写。
同步异步物化视图对比
|
物化视图 |
单表聚合 |
多表关联 |
查询改写 |
刷新策略 |
基表 |
|---|---|---|---|---|---|
|
异步物化视图 |
是 |
是 |
是 |
异步刷新、手动刷新 |
支持多表构建。基表可以来源:
|
|
同步物化视图 |
仅部分聚合函数 |
否 |
是 |
导入同步刷新 |
仅支持基于Default Catalog的单表构建。 |
基本概念
- 基表:物化视图的驱动表。对于StarRocks的异步物化视图,基表可以是Default Catalog中的内部表、外部数据目录中的表,甚至是已有的异步物化视图或视图。StarRocks支持在所有StarRocks表类型上创建异步物化视图。
- 刷新:创建异步物化视图后,其中的数据仅反映创建时刻基表的状态。当基表中的数据发生变化时,需要通过刷新异步物化视图更新数据变化。目前StarRocks支持两种异步刷新策略ASYNC、MANUAL。
- ASYNC:异步刷新,每当基表中的数据发生变化时,物化视图根据指定的刷新间隔自动触发刷新任务。
- MANUAL:手动触发刷新。物化视图不会自动刷新,需要用户手动维护刷新任务。
- 查询改写:
查询改写是指在对已构建了物化视图的基表进行查询时,系统自动判断是否可以复用物化视图中的预计算结果处理查询。如果可以复用,系统会直接从相关的物化视图读取预计算结果,以避免重复计算消耗系统资源和时间。
StarRocks支持基于SPJG类型异步物化视图的自动、透明查询改写。SPJG类型的物化视图是指在物化视图Plan中只包含Scan、Filter、Project以及Aggregate类型的算子。