订阅更新

StarRocks 物化视图怎么用?同步和异步有什么区别?

面试问 358 约 2 分钟读完

湖仓与 OLAP第 25 / 34 题

随机一题
本文目录
  1. 面试怎么回答
  2. 同步物化视图
  3. 异步物化视图
  4. 查询改写
  5. 怎么用好

面试怎么回答

同步物化视图建在单表上,和基表在同一事务里更新、数据强一致,适合单表预聚合或换排序键;异步物化视图支持多表 JOIN 和外部表,按手动、定时或基表变化刷新,可以按分区增量刷新,适合宽表和汇总层,但刷新前数据有延迟。两者都支持查询自动改写,业务 SQL 写基表即可。我会从慢查询日志里挑高频固定模式的查询建物化视图,并持续看命中率和刷新开销。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

报表查询太慢,面试官会问:能不能用物化视图?同步物化视图和异步物化视图有什么区别?查询怎么自动用上它?

同步物化视图

建在单张表上,可以看作这张表的一个预聚合或换了排序键的副本。基表导入数据时,物化视图在同一个事务里同步更新,数据始终和基表一致。

适用场景:单表上固定维度的预聚合,或者需要另一种排序键来加速某类过滤查询。

限制:只能基于单表,支持的聚合函数和表达式有限。

异步物化视图

可以基于多表 JOIN、复杂聚合,甚至外部表(如 Hive、Iceberg)创建。数据按设定的策略刷新:手动、定时,或者基表变化后触发;分区表可以只刷新发生变化的分区。

适用场景:多表关联后的宽表、跨层的汇总表、加速湖上数据的查询,相当于在 OLAP 引擎里做一部分数仓建模。

需要注意的是数据新鲜度:刷新之前,物化视图的数据会落后于基表。

查询改写

用户的 SQL 仍然写在基表上,优化器判断某个物化视图能回答这个查询(或其中一部分)时,会自动改写成查物化视图。业务方不用改 SQL,这是物化视图比手工建汇总表更好用的地方。

要让改写生效,物化视图的维度和聚合要能覆盖查询;对于异步物化视图,还要考虑能否接受数据有延迟。

怎么用好

  • 从慢查询日志里找出高频、模式固定的查询,再针对性建物化视图,不要一开始就建很多。
  • 物化视图会占用存储,也会消耗刷新资源,要定期检查命中率,清理不用的。
  • 分区表尽量用分区级增量刷新,避免每次全量重算。