MaxCompute 物化视图智能推荐最佳实践

量子纠缠态
• 阅读 819

什么是物化视图

MaxCompute物化视图是一种预先计算和存储结果数据的数据对象,也可以称之为“实体化视图”。物化视图可以作为一张虚拟表存在于MaxCompute项目中,它的内容是一个或多个表的聚合,过滤以及Join组合计算结果。物化视图可以大幅度减少查询处理时间以及节省作业计算资源,基于MaxCompute优化器强大的自动查询改写能力,当作业可以复用物化视图结果时,优化器自动把一些复杂的操作替换成读取物化视图操作,从而提升作业执行速度、节省作业计算资源。

什么是物化视图智能推荐

物化视图的使用,不但需要对物化视图的工作原理比较了解,同时需要了解业务数据行为与业务数据的使用场景,给普通用户使用物化视图带来一定困难。

MaxCompute 物化视图智能推荐实现了用户无感知的流程化使用物化视图能力。用户开启物化视图智能推荐后,MaxCompute 可以为用户自动分析业务数据使用场景,自动推荐物化视图,并且可以可视化展现物化视图的使用效果。为物化视图使用大大降低了门槛,同时也带来更多的物化视图使用场景。

物化视图智能推荐的特点

  • 简单易用,用户不需要了解物化视图各个底层工作细节,只需选择自己的Project开启自动智能分析。
  • 智能,MaxCompute自动对用户历史作业进行分析,自动识别周期性作业,并智能提取作业集合中的公共计算逻辑作为物化视图计算逻辑,并最终转换成用户友好的SQL文本形式,按照推荐程度排序展示给用户。
  • 便于管理,MaxCompute控制台提供一站式的功能开通、物化视图管理以及物化视图使用效果展示。

物化视图智能推荐的使用场景

数据治理

随着企业业务发展,公司的业务数据会越来越多,各部门对数据都存在各种数据分析需求,在日常使用过程中,各个部门对数据的使用会存在一定的交叉使用,难免会有大量的相同逻辑的重复计算。

日常用户或者大数据平台管理人员很难发现重复计算,因为重复计算部分可能只是整个计算逻辑中一部分。在发现有重复计算时想修改也比较困难,如果重新抽象一个重复计算的表,下游的依赖作业都需要更改,然后测试上线。会带来额外的工作量,从而导致数据治理很难推动。

使用物化视图智能推荐功能后,MaxCompute会自动分析Project中存在哪些公共的计算逻辑,并且推荐出来,让用户去创建物化视图,有了物化视图后,通过强大的优化器改写能力,能够让作业自动应用上物化视图的计算结果,不需要用户修改原来的逻辑。

示例,在没有物化视图,如下图,Tab4跟Tab5的计算中存在棱形跟圆形部分逻辑是重复计算的,在下图中计算了两遍。

MaxCompute 物化视图智能推荐最佳实践

创建物化视图MV1后,菱形跟圆形部分逻辑只计算了一遍,可以节省计算资源的同时提高计算速度。

MaxCompute 物化视图智能推荐最佳实践

智能数据建模

传统大数据处理,第一步就是既懂技术又懂业务的数据分析专家搭建数据仓库,对数据仓库进行分层,正常模型都分贴源层,明细层,汇总层,应用层等;传统建模方式有以下弊端:

1)模型建的好坏,直接影响到计算的有效性,严重依赖建模的专家;

2)同时随着业务发展,数据越来越多后,难免有模型建的不是很合适的情况,如果再改模型对整个现有任务都有影响;

3)资源浪费,部分模型建好后,但是使用的人很少或者没有使用,导致整个模型白白浪费计算资源和存储资源。

MaxCompute 物化视图智能推荐最佳实践

有了物化视图智能推荐后,用户不需要依赖专家来预先建模。可以做到智能的自动化建模。当用户使用数据后,后端自动分析,分析出重复计算逻辑,MaxCompute自动推荐创建物化视图,实现真正的灵活,快捷的自动化建模。让用户不用担心数据存储情况,计算资源使用效率等问题;用户可以把更多精力放在业务发展上。特别对中小型公司来说,不需要额外要招聘数据建模同学,全部交给MaxCompute物化视图智能推荐即可。

MaxCompute 物化视图智能推荐最佳实践

数据报表/看板

物化视图智能推荐也可以为用户的BI智能报表/看板提供加速能力。MaxCompute会为用户自动分析重复刷新的数据,推荐创建物化视图,有了物化视图后可以预先计算好报表/看板需要的数据,在报表/看板需要用的时候直接会自动改写路由去查物化视图,可以大大降低报表/看板的响应时间。

如何使用物化视图智能推荐

物化视图智能推荐使用非常简单,只需以下几个步骤:

1.登录MaxCompute控制台,点击左边菜单“物化视图”;

2.选择Tab页“设置”,开启智能分析,并且添加需要分析的项目名称;

3.T+1天后,查看Tab页“物化视图推荐”,查看系统根据用户使用行为,推荐出来的公共子查询;

4.选择对应的子查询创建物化视图;

5.T+1天后,查看Tab页“物化视图管理”,可以看到目前哪些查询计算调用了该物化视图以及调用物化视图前后效果对比。

物化视图智能推荐示例

阿里集团数据中台团队负责建设整个阿里的数仓“公共层”,试图将重复计算的逻辑进行收敛,让多个下游业务访问同一个结果表,从而达到节省计算和存储的目的。随着数据量和业务复杂度的几何增长,传统的“公共层”已经很难达到原本设想的状态,主要原因有:

  • 找数难
  • 逻辑存在相似性但是结果表不完全可用
  • 人工发现公共逻辑难度大

MaxCompute推出的物化视图智能推荐功能,恰好能很好的解决上述问题。数据中台团队通过将MaxCompute智能推荐结果转变为物化视图,大大降低了下游作业之间的重复计算,节省了大量计算资源。

一期物化视图智能推荐功能覆盖了4个BU共20个project,命中物化视图的作业,其平均计算资源节省率为14%。后续我们会有更加详细的实际使用案例来展开介绍。

物化视图智能推荐使用说明

物化视图并不能解决所有问题,在绝大部分情况下,总体上看都是可以为用户带来正向收益,包括可以减少计算资源,提高计算速度,并降低计算成本。但是针对某个查询计算,在小概率下会给用户带来负收益,用户需要关注以下几点:

1.公共子查询被物化成物化视图后的数据是否发生数据膨胀,如果发生几倍或者更高的膨胀时,不建议使用物化视图。

2.使用后付费的用户,需要注意目前物化视图节省的是计算资源和计算复杂度,但并不一定会减少数据扫描量,因为在数据物化过程中如果发生数据膨胀后,可能扫描量会增加。

作者 夏俊伟 阿里云高级产品专家 / 郑君正 阿里云高级技术专家

原文链接

本文为阿里云原创内容,未经允许不得转载。

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
4年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
4年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
4年前
mysql(视图 事务 索引 外键)
视图视图本质就是对查询的封装创建视图(定义视图 起名以v\_开头)createviewv\_studentsasselectclasses.nameas c\_name,students.\fromstudentsinnerjoinclassesonstudents.cls\_idclasses.id;查
Easter79 Easter79
4年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
4年前
MySQL学习笔记20
二十、使用视图1、视图视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。例如:SELECTcust\_name,cust\_contact     FROMcustomers,orders,orderitems     WHEREcustomers.cust\_idorder
Wesley13 Wesley13
4年前
MySQL视图,函数,触发器,存储过程
1\.视图  视图是一个虚拟表,它的本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视
Wesley13 Wesley13
4年前
MySQL视图
什么是视图?一张虚表,和真实的表一样。视图包含一系列带有名称的行和列数据。视图是从一个或多个表中导出来的,我们可以通过insert,update,delete来操作视图。当通过视图看到的数据被修改时,相应的原表的数据也会变化。同时原表发生变化,则这种变化也可以自动反映到视图中。视图具有以下优点:简单化:看到的就是需要的
Easter79 Easter79
4年前
SwiftUI 跨组件数据传递
作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言众所周知,SwiftUI的开发模式与React、Flutter非常相似,即都是声明式UI,由数据驱动(产生)视图,视图也会与数据自动保持同步,框架层会帮你处理“绑定”的问题。在声明式UI中不存在命令式地让一个视图变成xxx
量子纠缠态
量子纠缠态
Lv1
故园今夕是元宵,独向蛮村坐寂寥
文章
4
粉丝
0
获赞
0