更新时间:2026-01-06 GMT+08:00
分享

StarRocks物化视图概述

物化视图是包含一个查询结果的数据库对象,它可以是远端数据的一份本地拷贝,也可以是一个表或一个join结果的行/列的一个子集,还可以是使用聚合函数的一个汇总。相对于普通的逻辑视图,将数据物化后,能提升查询性能。物化视图包含同步物化视图和异步物化视图。

物化视图原理介绍

物化视图的数据组织形式和基表、RollUp表相同。用户可以在新建基表时添加物化视图,也可以对已有表添加物化视图,这种情况下,基表的数据会自动以异步方式填充到物化视图中。基表可以拥有多张物化视图,向基表导入数据时,会同时更新基表的所有物化视图。数据导入操作具有原子性,因此基表和它的物化视图保持数据一致。

物化视图创建成功后,用户原有查询基表的SQL语句保持不变,StarRocks会自动选择一个最优的物化视图,从物化视图中读取数据并计算。用户可以通过EXPLAIN命令检查当前查询是否使用了物化视图。

物化视图中的聚合和查询中聚合的函数对应关系如表1所示。其中bitmaphll的聚合函数在查询匹配到物化视图后,查询的聚合算子会根据物化视图的表结构进行改写。

表1 物化视图聚合和查询中聚合的函数对应关系

物化视图聚合函数

查询中聚合函数

sum

sum

min

min

max

max

count

count

bitmap_union

bitmap_union、bitmap_union_count、count(distinct)

hll_union

hll_raw_agg、hll_union_agg、ndv、approx_count_distinct

同步异步物化视图对比

表2 物化视图对比

物化视图

单表聚合

多表关联

查询改写

刷新策略

基表

异步物化视图

异步刷新、手动刷新

支持多表构建。基表可以来源:

  • Default Catalog。
  • External Catalog。
  • 已有异步物化视图。
  • 已有物化视图。

同步物化视图

仅部分聚合函数

导入同步刷新

仅支持基于Default Catalog的单表构建。

基本概念

  • 基表:物化视图的驱动表。对于StarRocks的异步物化视图,基表可以是Default Catalog中的内部表、外部数据目录中的表,甚至是已有的异步物化视图或视图。StarRocks支持在所有StarRocks表类型上创建异步物化视图。
  • 刷新:创建异步物化视图后,其中的数据仅反映创建时刻基表的状态。当基表中的数据发生变化时,需要通过刷新异步物化视图更新数据变化。目前StarRocks支持两种异步刷新策略ASYNC、MANUAL。
    • ASYNC:异步刷新,每当基表中的数据发生变化时,物化视图根据指定的刷新间隔自动触发刷新任务。
    • MANUAL:手动触发刷新。物化视图不会自动刷新,需要用户手动维护刷新任务。
  • 查询改写:

    查询改写是指在对已构建了物化视图的基表进行查询时,系统自动判断是否可以复用物化视图中的预计算结果处理查询。如果可以复用,系统会直接从相关的物化视图读取预计算结果,以避免重复计算消耗系统资源和时间。

    StarRocks支持基于SPJG类型异步物化视图的自动、透明查询改写。SPJG类型的物化视图是指在物化视图Plan中只包含Scan、Filter、Project以及Aggregate类型的算子。

相关文档