您当前位置:资讯中心 >大数据 >浏览文章

物化视图在 MaxCompute 中的探索与实践

来源:CTO 日期:2024/4/17 7:21:52 阅读量:(0)

一、MaxCompute 和物化视图

MaxCompute 是一个多功能、高性能、易使用的企业级的数据仓库服务,已经为阿里巴巴集团提供服务达 14 年。目前每日 DML 的任务数超过了 2,600 万,单日的数据量规模达到 EB 级,服务集团内用户 4W+。在如此大的体量之下,也暴露出几个问题:随着业务的规模越来越大,重复计算越来越多,消耗了大量资源;对于计算结果的产出时效有了更高要求;通过大批量改造脚本来进行数据治理的成本高,难度大。最终物化视图成为解决以上问题的最佳方案。

与普通视图(Virtual View)不同,物化视图存储的是查询结果的物理副本,而普通视图仅仅是一个虚拟的表,它在查询时才动态地生成结果。物化视图的发展历史与数据库技术的进步紧密相关。以下是物化视图发展的一些关键阶段。

图片

  • 早期数据库阶段:早期的数据库系统中,并没有物化视图的概念。数据库主要关注于数据的存储和基本的查询操作。
  • RDBMS 视图阶段:视图允许用户通过 SQL 语句定义一个虚拟表,这个虚拟表是基于一个或多个实际表的查询结果。然而,早期的视图通常是非物化的,即它们在查询时才计算结果。
  • RDBMS 物化视图阶段:物化视图的概念在 20 世纪 90 年代初期被提出。物化视图将查询结果实际存储在数据库中,这样用户就可以像访问普通表一样访问物化视图,而不需要每次都执行复杂的查询。随着数据库技术的发展,物化视图的性能优化和自动化管理成为研究的重点。数据库管理系统(DBMS)提供了更多的功能来优化物化视图的性能,如增量更新、自动更新、并行处理等。
  • 云原生大数据物化视图阶段:在云计算和大数据时代,物化视图的作用变得更加重要和普遍。基于云计算几乎无限的可扩展性,物化视图可以适应更大的数据集;实时计算引擎提高了物化视图的更新频率和更新效率;自动化和编排工具使得物化视图的创建、管理和刷新变得简单;云计算通常是按需付费模式,物化视图节约了计算资源,实现降本增效;物化视图可以作为数据质量的检查点,监控数据质量。

物化视图的优点如下:

  • 提高查询性能:对于复杂的查询,由于物化视图存储了查询结果,对于频繁执行的查询,可以直接从物化视图中读取数据,而不需要每次都执行完整的查询,从而提高了查询效率。
  • 保持数据一致性:物化视图可以定期刷新,以确保数据的一致性。在数据变化不频繁的情况下,这可以减少数据同步的开销。
  • 应急查询:物化视图允许用户在数据库服务器关闭或网络连接中断时,仍然可以访问和分析数据。

物化视图也有一些缺点:

  • 存储空间:物化视图需要额外的存储空间来保存查询结果。
  • 数据更新:如果底层数据频繁变动,物化视图需要定期刷新,这可能会增加维护成本。
  • 复杂性:对于某些复杂的查询,物化视图可能难以实现或者维护。

二、物化视图的设计和实现

图片

在物化视图的设计阶段,我们关注物化视图的创建、维护和应用。

1. 如何创建物化视图

MaxCompute 支持创建普通物化视图、分区物化视图、聚簇物化视图和穿透物化视图,具体的创建方式体现在建表语句中,PARTITIONED BY (col_name) 语句指定创建物化视图表为分区表,CLUSTERED BY (col_name) SORTED BY (col_name [ASC | DESC])INTO number_of_buckets BUCKETS 语句指定创建物化视图为聚簇表。

图片

在物化视图创建的过程中有两个关键点,第一个是需要建立一个基表到物化视图的索引,这样在查询时就能快速地获取到相关的物化视图。第二个是基表数据版本保存,在物化视图的元数据中需要保存对应基表的数据版本;另外对于分区物化视图,要求分区物化视图的分区列和基表保持一致,这样的话,可以实现分区级的增量更新。

图片

2. 如何维护物化视图

MaxCompute 通过建表语句中的 TBLPROPERTIES 指定是否开启自动刷新,刷新时间间隔和分区增量刷新:

  • "enable_auto_substitute"="true", --指定当分区不存在时是否转化视图来查询。
  • "enable_auto_refresh"="true", --指定是否开启自动刷新。
  • "refresh_interval_minutes"="120", --指定刷新时间间隔。
  • "only_refresh_max_pt"="true" --针对分区物化视图,只自动刷新源表最新分区。

图片

3. 如何使用物化视图实现加速查询

自动查询改写:自动查询改写通过四个步骤实现,第一步,利用基表到 MV 的索引去获取相关物化视图;第二步是命中预判定,假如一个基表关联的 MV 的数目太多的话,通过命中预判定,以便尽早过滤无效的物化视图;第三步是把物化视图注册到优化器中;第四步是改写校验及执行,这主要包括的是基于 CALCITE 改写规则的二次开发,其中包含了一系列的校验,包括字段校验、谓词校验、关联校验以及分组和聚合校验等,通过这些校验来判断查询字段、查询条件、关联条件、分组和聚合条件等是否与物化视图一致,从而决定是否能用物化视图改写查询。

比如一个查询 SQL 是:

SELECT ds, count(uid) as pv
FROM users
WHERE ds>=‘20230501’ AND ds<=‘20230507’
GROUP BY ds;
关键字:
声明:我公司网站部分信息和资讯来自于网络,若涉及版权相关问题请致电(63937922)或在线提交留言告知,我们会第一时间屏蔽删除。
有价值
0% (0)
无价值
0% (10)

分享转发:

发表评论请先登录后发表评论。愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。