跳到主要内容

物化视图概览

物化视图(Materialized View)是既包含计算逻辑、也包含数据的实体;与仅存储计算逻辑、不存储数据的普通视图不同,物化视图会按策略周期或实时刷新数据,可直接被查询,也可对查询进行透明改写。

阅读须知

在选择和使用物化视图前,建议先确认以下问题:

  • 想解决什么问题?查询加速、数据建模,还是湖仓加速?
  • 对数据时效性要求多高?需要强一致还是最终一致?
  • 定义 SQL 涉及单表还是多表?
  • 刷新方式希望是全量、分区增量,还是实时?

下文将围绕这些问题逐一展开。

物化视图的使用场景

物化视图根据 SQL 定义计算并存储数据,并按策略进行周期性或实时性更新。它可被直接查询,也可以将查询透明改写。常见适用场景如下:

查询加速

在决策支持系统(如 BI 报表、Ad-Hoc 查询)中,分析型查询通常包含聚合操作,可能还涉及多表连接。

  • 计算此类查询结果较为消耗资源,响应时间可能长达分钟级。
  • 业务场景往往要求秒级响应。
  • 可通过构建物化视图,对常见查询进行加速。

轻量化 ETL(数据建模)

在数据分层场景中,可以使用物化视图的嵌套来构建 DWD 和 DWM 层,并利用物化视图的调度刷新能力替代部分 ETL 任务。

湖仓一体

针对多种外部数据源,可对其使用的表构建物化视图,从而:

  • 节省从外部表导入数据到内部表的成本;
  • 加速对外部数据源的查询过程。

物化视图的分类

可以从数据时效性SQL 模式刷新方式三个维度对物化视图进行分类。

按数据时效性分类:同步 vs 异步

分类数据一致性典型时效是否支持直接查询适用场景
同步物化视图与基表强一致实时不支持时效性要求高的场景
异步物化视图与基表最终一致T+1 / 小时级支持时效性要求不高的常规分析场景

选型建议:

  • 时效性要求 → 选择同步物化视图。
  • 时效性要求不高,可接受一定延迟 → 选择异步物化视图。

按支持透明改写的 SQL 模式分类:单表 vs 多表

物化视图的定义 SQL 既可以是单表查询,也可以是多表查询。从所用表数量出发,可分为单表物化视图和多表物化视图:

  • 异步物化视图:可使用单表,也可使用多表。
  • 同步物化视图:仅支持单表。

按刷新方式分类:全量 vs 分区增量 vs 实时

不同类别的物化视图支持的刷新方式不同:

物化视图类型全量刷新分区增量刷新实时刷新
异步物化视图支持支持不支持
同步物化视图--支持

各刷新方式的含义:

  • 全量刷新(异步):计算物化视图定义 SQL 的所有数据。
  • 分区增量刷新(异步):当物化视图基表的分区数据发生变化时,识别出对应变化的分区并仅刷新这些分区,无需刷新整个物化视图。
  • 实时刷新(同步):可以理解为实时刷新,始终保持与基表的数据一致。