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;
物化视图为:
SELECT ds, count(uid) as pv
FROM users
WHERE ds>=‘20230401’
GROUP BY ds;
查询改写后的 SQL 就变成了:
SELECT ds, pv
FROM mv
WHERE ds>=‘20230501’ AND ds<=‘20230507’ ;
自动查询改写是基于 SPJG 的匹配。匹配会自动忽略空格、换行、注释、别名等影响,除此之外查询 SQL 与物化视图 SQL 不完全相同的场景下,自动查询改写会尝试改写查询 SQL,补偿物化视图 SQL 和查询 SQL 之间缺少的计算动作,比如当 SQL 查询的 SELECT 列与物化视图 SQL 的 SELECT 列不完全相同时,自动查询改写对 SELECT 列支持情况如下:
(1)支持查询 SQL 的 SELECT 列的顺序与物化视图 SQL 不同。
(2)支持物化视图 SQL 中的 SELECT 列没有出现在查询 SQL 中。
(3)支持查询 SQL 中的 SELECT 列不在物化视图 SQL 的 SELECT 列中,但是可以由物化视图 SQL 的 SELECT 列组合计算得到。
(4)不支持查询 SQL 中的 SELECT 列不在物化视图 SQL 的 SELECT 列中,且无法由物化视图 SQL 的 SELECT 列组合计算得到。
自动穿透:自动穿透的关键是区分物化数据和非物化数据。通过 SQL 解析后的执行计划,确定查询 SQL 的目标分区,然后去 MV 里面看相应的分区是否得到了物化,如果存在没有物化的分区,就将该分区转化为视图去执行。比如有个查询 SQL 是:select key from src where ds >= ‘20230530’group by key,存在一个按天增量的 MV 只有 20230601 到 20230605 的数据,自动穿透功能会直接读取 20230601到 20230605 已物化的分区,并将未物化的分区 20230530 和 20230531 转化为视图执行,最后将两部分数据 UNION ALL 起来。自动穿透既节省了存储,又实现了灵活扩展。
03
智能推荐及自动物化视图
物化视图在推广的过程中存在以下三个问题:
- 用户的 SQL 能力有限,对于物化视图的了解有限,无法很好利用。
- 用户具备相应 SQL 水平,但是不具备全局视角,无法确定哪些重复计算应该建立物化视图。
- 不能准确衡量物化视图的价值,就不具备大规模的宣传和推广的动力。
针对以上三个问题,MaxCompute 通过智能推荐和自动物化的方法降低物化视图的创建难度,提高用户使用体验。
1. 智能推荐
通过对执行任务进行分析,智能选择资源消耗大、任务耗时长、使用频率高、预期收益大的 SQL 进行语句拆分和合并,提取出公共表达式,基于公共表达式构建物化视图。在任务运行时选择匹配率高的物化视图进行推荐,比如:
(1)优先全匹配,当不存在全匹配的物化视图时才会尝试选择需要进行补偿的物化视图。
(2)当有多个需要进行补偿的物化视图时,查询 SQL 涉及的表与物化视图涉及的表匹配的数量越多,优先级越高。
(3)当有多个需要进行补偿的物化视图与查询 SQL 涉及的表匹配数量相同时,根据物化视图的数据存储大小作为优先级标准,物化视图的数据存储大小越小,优先级越高。
2. 自动物化视图
在自动物化视图的实现中,有三个关键点:
(1)在线物化,利用延迟物化能力,先不生成数据,等到 SQL 执行时再生成数据。
(2)QUATA 限制:物化视图不能没有限制的随意生成,我们会敲定一个配额,只有占用存储在这个阈值之内,才会自动生成物化视图。
(3)收集反馈,根据反馈结果对物化视图进行迭代,只保留有价值的物化视图。用户可在CONSOLE 页面,一站式生成和查看物化视图。
04
总结和展望
MaxCompute 物化视图的功能概览如下图所示:
我们针对业界产品做了一个分析,对比 MaxCompute 与 Hive、Spark、Snowflake、RedShift、BigQuery 等产品的物化视图功能,如下所示。