MATERIALIZED VIEW(物化视图)
物化视图是一种特殊的数据库对象,它可以定期缓存查询结果以提高性能和效率。由于物化视图中的数据是预先计算好的,因此查询物化视图通常比直接查询基表更快。当查询频繁运行或足够复杂时,这种性能差异可能会非常明显。因此,物化视图可以加速昂贵的聚合、投影和选择操作,尤其是那些频繁运行和在大型数据集上运行的操作。
物化视图
- 物化视图可以提高重复使用相同子查询结果的查询的性能。可以查询改写
- 当物化视图的数据对应的表产生插入、覆写、更新、删除等操作时,物化视图会自动失效,无法用于查询改写。
何时创建物化视图
物化视图特别适用于以下情况:
- 查询结果包含与基础表相比少量的行和/或列。
- 查询结果需要大量处理,包括半结构化数据分析、长时间计算的聚合等。
- 物化视图的基础表不经常变化。
云器Lakehouse物化视图特点
- 物化视图可以提高重复使用相同子查询结果的查询的性能。
- 物化视图支持定时刷新功能。可以通过SQL语法创建定时刷新功能与在应用程序级别手动维护实体化视图的等效项相比,这更有效且更不容易出错。
物化视图与普通视图的选择
通常,当决定创建物化视图还是普通视图时,可以使用以下标准:
- 如果视图的查询结果不经常变化、结果使用频繁且查询消耗大量资源,则创建物化视图。
- 如果视图的结果经常变化、结果不经常使用或查询不消耗太多资源,则创建普通视图。
物化视图与表、普通视图和缓存结果的比较
物化视图与表在某些方面相似,与普通(非物化)视图在其他方面相似。此外,物化视图与缓存结果有一些相似之处,特别是两者都允许存储查询结果以供将来重用。
物化视图管理
云器Lakehouse提供了以下DDL命令来创建和维护物化视图:
- 创建物化视图:创建物化视图需要指定基表、查询语句以及其他相关参数。创建成功后,物化视图将存储在数据库中,以便后续查询使用。
- 删除物化视图:当物化视图不再需要时,可以通过执行删除操作来释放相关资源。
- 刷新物化视图:当物化视图中的数据需要更新时,可以通过执行刷新操作来更新物化视图的数据。
更多操作请参考物化视图命令详情。
应用场景
以下使用场景重点介绍了物化视图的价值。如果您的应用场景符合以下条件,那么物化视图可以提高查询性能:
- 预汇总数据:如果您需要对大量数据进行汇总分析,物化视图可以利用定时任务进行预先汇总,从而提高查询性能。
- 预过滤数据:如果您的查询只需要读取表的特定部分,物化视图可以预先过滤数据,从而减少查询时的数据量。
- 预联接数据:如果您的查询需要联接多个表,尤其是大型表和小型表之间的联接,物化视图可以预先进行联接操作,从而提高查询性能。
Materialized View和Dynamic Table区别
从Lakehouse的实现机制上来看,动态表是基于传统的物化视图来演进的,虽然两者有一些共性,但是定位上存在很大区别
物化视图:性能优化利器 物化视图是一种预计算并存储查询结果的特殊视图,它能够显著提升查询效率。与传统视图不同,物化视图将计算结果保存在类似表的结构中,使得后续相似查询能够被优化器自动识别并直接使用预存结果,从而减少重复计算,加快查询速度。
动态表:数据加工的高效工具 动态表专注于数据加工,虽然也能提升查询性能,但它并不依赖于查询优化器的自动重写。物化视图只有保持数据是最新的才能查询改写,动态表面向加工场景可能数据并不是最新的。
传统的物化视图有些产品具有以下限制,目前Lakehouse没有该限制:
-
只能使用单个基表。物化视图不能基于复杂查询(即具有联接或嵌套视图的查询)。
-
物化视图不一定是增量刷新每个系统实现的不同,少量系统为了节省计算资源,加快加工速度,部分算子实现了增量计算
动态表的先进特性:
- 增量识别与优化:支持大数据环境下的文件粒度增量识别,实现实时增量读取和计算优化,以及写入优化。
- 智能决策:通过成本基础优化器(COST-BASED OPTIMIZER)智能选择全量、增量或部分增量计算,以适应不同查询需求。
- 实时任务运维:提供数据版本管理、回退和重跑等机制,为实时任务的运维提供全面支持。
数据时效性考量:
- 物化视图要求数据的即时更新,以确保查询改写的准确性。在基表数据变更时,Lakehouse采用定时刷新机制,确保物化视图的数据始终保持最新。
- 动态表则更注重数据加工的灵活性,根据业务定义来调整数据的滞后性,而不强制要求数据必须实时更新。
查询改写功能
目前Lakehouse的查询改写功能在Preview阶段,如果您需要打开。在提交SQL查询的时候请使用以下配置
set cz.optimizer.enable.mv.rewrite=true;
具体案例