Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Calcite系列(十一):物化视图

Calcite系列(十一):物化视图

原创
作者头像
Yiwenwu
发布于 2024-04-24 02:05:33
发布于 2024-04-24 02:05:33
9210
举报
文章被收录于专栏:Calcite剖析Calcite剖析

背景

物化视图(Materialized View):是一种特殊的物理表,本质是预计算,是多个计算过程之间的联系建立。从数据组织层面优化数据访问效率,即把某些耗时的操作(例如JOIN、AGGREGATE)的结果保存到物理存储上,可以像表一样被访问,以便在后续查询时直接复用,最终达到加速查询的目的,即空间换时间。而普通视图(View)仅是简化用户的查询定义,不存储实际结果数据。

物化视图使用存在一定门槛,提高查询性能的同时也引入了相应的成本:

  • 存储成本:物化表存储空间;
  • 计算成本:若源表(base表)数据变更,物化视图自动失效,需计算更新后才可用;

因此,物化视图并不适合所有场景,使用物化视图条件:提速收益 > 存储成本 + 计算成本。

物化视图适合场景:

  • 源表变更不频繁:降低计算成本;
  • 相比于源表,物化表的字段和结果数量有明显的减少:降低存储成本;
  • 物化表查询子句的执行是高成本的,(1).计算频繁,(2).计算复杂(消除Join和聚合的计算开销),(3).读取扫描量大:提高加速收益;

使用场景示例:

  • 查询存储在外部(冷存储),相比于内部存储(热存储),外部存储性能较低;
  • 对于数据仓库,物化视图可物化查看结果,屏蔽多个数据源差异,实现本地副本;

视图改写

视图改写常用的方式:

  1. 基于语法改写:最简单的改写方式,将查询的文本与物化视图的文本或语法树进行比较,完全匹配则可以进行改写;
  2. 基于规则改写:针对不同规则,穷举所有可能变换关系来寻找等价替代关系树;
  3. 基于结构改写提取查询特征并使用一套规则进行匹配改写,将查询表示为SPJG标准形式,提取查询中Join、Projects、Filters、Grouping、Aggregation五种表达式,分别与物化视图对应的表达式进行匹配改写;

Calcite 物化视图查询改写支持两种方式:

  1. 基于规则改写: 由 MaterializedViewSubstitutionVisitor实现,基于规则和等价类自底向上匹配
  2. 基于结构改写:由 MaterializedViewRule 规则集构成,基于查询优化器实现改写

Calcite物化视图的结构改写逻辑主要基于Goldstein 和 Larson 的“Optimizing Queries Using Materialized Views: A Practical, Scalable Solution”实现(Microsoft SQL Server的改写方案),是一种SPJG(join-select-project-groupBy)重写算法。

SPJ(join-select-project)视图改写条件:

  • The view contains all rows needed by the query expression:视图行数据可覆盖包含查询表达式的所有行;
  • All required rows can be selected from the view:查询结果可通过视图查询到;
  • All output expressions can be computed from the output of the view:查询结果表达式可通过视图计算查询到;
  • All output rows occur with the correct duplication factor:对于重复语义的算子,有相同一致的行为,如distinct算子在相同的字段;

Calcite MaterializedViewRule 实现结构改写规则,可参考单测 MaterializedViewRelOptRulesTest

Lattice

Lattice(格):是一个数学概念,表示数学上的一种集合,非空有限子集都有一个上确界(并)和一个下确界(交)的偏序结合。Calcite针对物化视图对Lattice进行扩展,根据用户定义的关联和聚合要求,划分出多个物化视图来适应不同类别的查询,支持自动划分物化视图。 Calcite中Lattice定义功能:

  • 可声明主键和外键约束;
  • 辅助优化器将用户查询映射到物化视图;
  • 提供框架,用于采集数据量和用户查询统计信息;
  • 允许Calcite自动产生物化视图

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Calcite Lattice物化视图选择
物化视图(Materialized View,简称MV):是一种特殊的物理表,本质是预计算。通过多个计算过程之间的联系建立,从数据组织层面优化数据访问效率,把某些长耗时的操作结果(例如JOIN、AGGREGATE) 直接保存到物理存储上,可以像表一样被访问,以便在后续查询时直接复用,最终实现加速查询的目标,即空间换时间。与之相对的,普通视图(View) 仅是对用户查询定义的一种简化,并不存储结果数据,无法加速查询。
Yiwenwu
2025/02/09
4340
解读 Optimizing Queries Using Materialized Views: A Practical, Scalable Solution
原文链接:Optimizing Queries Using Materialized Views:A Practical, Scalable Solution
Yiwenwu
2025/02/11
4220
oracle物化视图的刷新命令_物化视图增量刷新
普通视图仅包含其定义和被引用表的元数据,并不实际存储数据,查询数据时需要通过视图再去主表中获取数据。但是当需要查询的数据字段过多时,普通视图的效率会急剧下降。物化视图将经常使用的数据拷贝并存储下来,在查询时就可以直接返回数据。本质上是一个物理表,会占用磁盘空间。
全栈程序员站长
2022/11/15
2.9K0
基于catalyst的物化视图改写引擎的实现
更新日志: 1. 2020/06/16 group by 视图的部分描述错误,已修正。
用户2936994
2022/04/07
7360
兼顾高性能与低成本,浅析 Apache Doris 异步物化视图原理及典型场景
在现代化的数据分析场景中,数据量以指数级速度快速膨胀,分析维度在不断扩展,查询逻辑的复杂度也在日益增加。从性能角度考虑,在承担高并发查询的压力下,秒级别甚至更快的响应速度已成为基本需求。同时,面对有限的计算资源,成本及性能如何平衡,严格的资源管控也显得尤为重要。
SelectDB技术团队
2024/11/20
3610
【Flink】第二十八篇:Flink SQL 与 Apache Calcite
【Flink】第四篇:【迷思】对update语义拆解D-、I+后造成update原子性丢失
章鱼carl
2022/03/31
2.5K0
【Flink】第二十八篇:Flink SQL 与 Apache Calcite
ClickHouse物化视图(八)
create 语法,会创建一个隐藏的目标表来保存视图数据。也可以 TO 表名,保存到一张显式的表。没有加 TO 表名,表名默认就是 .inner.物化视图名
Java技术债务
2022/08/09
1.5K0
​深入浅出 ClickHouse 物化视图
数据库查询语言(query language)是数据库管理系统(DBMS)提供给用户和数据库交互的工具,查询语言分为三类 [^1]:
腾讯技术工程官方号
2023/07/15
2.7K0
​深入浅出 ClickHouse 物化视图
Oracle基于物化视图实现远程数据复制
远程表复制功能:可以借助数据库链接(dblink),在远程数据库中建立一个本地表的副本,用该方式实现表的定时同步。物化视图存储基于远程表的数据,也可以称为快照。
loong576
2019/09/10
1.2K0
Oracle基于物化视图实现远程数据复制
StarRocks 物化视图最佳实践
文档:https://docs.starrocks.io/zh/docs/using_starrocks/async_mv/Materialized_view/
码之有理
2025/01/03
8791
PostgreSQL 物化视图 与 表继承 的头脑风暴
OK PostgreSQL 的菜单上也有一个叫 Materialized views 的功能,同时PG 也有一个表 inheritance 的东西。而这两样东西可以解决数据应用中的很多问题。那怎么来应用PG 提供的这两个功能。
AustinDatabases
2019/09/12
2K0
PostgreSQL 物化视图 与 表继承 的头脑风暴
「ClickHouse系列」实时分析优化AggregateFunction及物化视图
AggregatingMergeTree有些许数据立方体的意思,它能够在合并分区的时候,按照预先定义的条件,聚合数据。
王知无-import_bigdata
2022/04/13
3.3K0
「ClickHouse系列」实时分析优化AggregateFunction及物化视图
Oracle物化视图详解
现实工作中会有多个数据源同步到一个数据库完成数据分析的场景,这些数据可以不是实时同步的,我们一般通过定时任务抽取数据到统计分析库给应用使用。
星哥玩云
2022/08/16
3.4K0
oracle物化视图
物化视图是一种特殊的物理表,“物化”(Materialized)视图是相对普通视图而言的。普通视图是虚拟表,应用的局限性大,任何对视图的查询,Oracle都实际上转换为视图SQL语句的查询。这样对整体查询性能的提高,并没有实质上的好处。
HUC思梦
2020/09/03
1.4K0
"氮气加速器"- 同步物化视图,让查询速度"飞"起来
深夜凌晨两点,数据工程师小张还在加班处理各种复杂的数据分析需求。"这个查询速度也太慢了,都等了半天了还没出结果..." 他揉了揉疲惫的双眼,忍不住吐槽。这不,又收到产品经理的"红色感叹号"消息:"那个实时大屏怎么又卡住了?"
一臻数据
2024/12/24
770
"氮气加速器"- 同步物化视图,让查询速度"飞"起来
StarRocks 查询优化&执行调度
,表示一个优化器操作节点/算子。OptExpression主要是用在传递计划树的接口上,在Memo/Group/GroupExpression中都不会存在该结构。
Yiwenwu
2025/06/22
230
「ClickHouse系列」ClickHouse中的物化视图详解
视图是由若干个字段以及若干条记录构成(也常称为虚标),它与表有很多相似的地方,视图中的数据源来自于原表,视图本身不存储数据,视图它保存的仅仅是一条select语句,并没有保存真正的数据。
大数据真好玩
2022/04/27
13K0
「ClickHouse系列」ClickHouse中的物化视图详解
YashanDB|使用 select * 创建物化视图无法触发查询重写?问题出在这儿!
经过实际验证,问题出在一个细节——使用了 select * 创建物化视图。本文将带你分析问题原因,并给出规避建议。
数据库砖家
2025/04/23
950
ClickHouse物化视图在微信的实战经验
ClickHouse广泛用于用户和系统日志查询场景中,借助腾讯云提供基础设施,微信也在分阶段逐步推进clickhouse的建设和应用,目前作为基础建设的一部分,主要针对于OLAP场景,为业务方提供稳定高效的查询服务。
Vitamin_C
2021/06/08
5K1
ClickHouse物化视图在微信的实战经验
性能追平存算一体!StarRocks 3.1 重磅发布,真正的云原生湖仓来了
8 月 7 日,StarRocks 3.1 重磅发布。新版本中,StarRocks 将影响性能表现的技术要素全部从存算一体架构引入到了存算分离架构,并针对云原生环境里的易用性、稳定性进行了一系列的优化。
深度学习与Python
2023/09/08
1.4K0
性能追平存算一体!StarRocks 3.1 重磅发布,真正的云原生湖仓来了
相关推荐
Calcite Lattice物化视图选择
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档