MaxCompute2.0新功能介绍

在过去的两年内,MaxCompute进行了翻天覆地的重构,从1.0版本全面升级到了2.0版本。而大家或许对于MaxCompute 2.0的一些新特性并不了解,在本文中,MaxCompute技术专家秋鹏就为大家详细介绍MaxCompute 2.0的新特性。

本文主要围绕以下三个方面进行分享:
MaxCompute 2.0简介
MaxCompute 2.0 vs 1.0
MaxCompute 2.0 vs 竞品

一、MaxCompute 2.0简介

MaxCompute之所以要进行重构是因为MaxCompute 1.0上存在很多问题,在MaxCompute 2.0的概念提出前,MaxCompute就已经在线上服务内部和外部用户一段时间了,并且也获得了一些积极的反馈。但是MaxCompute 1.0中也存在一些问题需要解决,这些问题大概分为两个部分。首先,一些竞争对手比如Hive、Spark等用了很多MaxCompute还没有用上的新功能,他们能够达到比MaxCompute更加高效的性能,这就迫使MaxCompute尝试增加新的功能,并且优化自身引擎,解决已知的问题。在引入新功能的过程中,发现需要对于MaxCompute引擎进行重构,使得引擎能够支持新功能。此外,MaxCompute 1.0在用户开发体验上有待提升,相比于Hive以及MySQL存在一定差距,从原有系统向MaxCompute迁移存在一定的不兼容问题,这也制约了MaxCompute对于外部用户的吸引力。此外,在MaxCompute 1.0的开发过程中缺乏完善并且好用的集成开发环境,使得用户开发较为困难。



因此,基于1.0版本所存在的问题,MaxCompute就进行了一系列的改进,并提出了MaxCompute 2.0的概念。MaxCompute 2.0首先提出了三个重要的设计目标:强大的编译器,包容的生态以及高效的引擎。首先,编译器需要支持脚本式语言,能够让用户轻松编写复杂逻辑,还需要能够支持强大的IDE功能,比如实现错误实时提示以及代码填充等,从而提高用户开发体验。对于生态而言,需要使得MaxCompute的SQL支持标准SQL,还需要兼容开源生态,使得用户可以方便地将原有应用迁移到MaxCompute上。最后一点,还需要利用最新的分布式计算框架来优化执行引擎,从而使得执行的效率更高。



二、MaxCompute 2.0 vs 1.0

前面所讲的更多的是站在系统层面进行分享,接下来将围绕大家日常开发使用MaxCompute来进行分享,本部分主要将对比MaxCompute 2.0版本和1.0版本的区别所在。

编译器
MaxCompute 2.0在编译器上进行了完全重构,也进行了大量的优化,如图所示列举了部分关键点,比如所有编译错误都会行列号信息,这样的中括号格式能够方便IDE来实现各种各样的自动化处理;第二个就是全新的error key,相比于之前的error code具有更高的可读性;此外更重要的一点就是MaxCompute 2.0的编译结果更可能是包含warning的,warning是编译器在用户的SQL里面发现的有可能存在潜在问题的情况,而这些问题却并不会影响用户的SQL进一步编译和执行,但是编译器认为有必要将这些潜在问题提出来让用户改正。此外,MaxCompute 2.0编译器非常重要的一点新功能就是其支持错误恢复,这里的错误恢复指的是当碰到用户错误的时候会尝试去猜测用户SQL的实际意图,尝试去将错误恢复出来继续进行编译,这样的好处就是在同一次编译中的多次错误会一次性地报出来,方便用户修改。这一功能对于IDE而言是非常重要的,因为当用户使用IDE来做语法检查的时候会发现IDE能够将整个脚本中的所有错误同时标识出来。



数据类型
MaxCompute 2.0新增了很多数据类型,如下图所示。可以看出,MaxCompute 1.0只支持了几个有限的数据类型,这些数据类型其实在大多数场景下其实是够用的,但是将应用从已有的开源系统上移植过来的时候就会显得不足。而MaxCompute 2.0中更多的数据类型能够支持更丰富的表达能力。此外,MaxCompute 2.0还增加了很多常量的定义,比如TINYINT、SMALLINT、DATETIME以及TIMESTAMP等。当然了,这里也有两点需要注意,一点就是使用新类型需要使用新类型需要set odps.sql.type.system.odps2=true; 或者开Hive兼容。此外,还需要注意MaxCompute实际还支持CHAR类型和INTERVAL 类型,目前仅当打开Hive兼容模式下可用。



复杂类型
此外,MaxCompute 2.0还对于复杂类型进行了补充,支持了ARRAY、MAP以及STRUCT三种类型,并且这些复杂类型可以任意嵌套。MaxCompute 2.0对于复杂类型的定义、构造以及操作都进行了扩充,因此用户可以很轻松地使用这些复杂类型来实现复杂的逻辑。



语法结构
MaxCompute 2.0相比于1.0增加了如下图所示的很多语法结构。首先是Values表达式,其并不是MaxCompute原创的,在其他的SQL语言中也有,但是在MaxCompute 1.0中并没有支持,这就导致在MaxCompute 1.0里面构造一个简单的数据是非常困难的。在MaxCompute 2.0中,因为支持了Values表达式,因此用户可以直接在SQL里面通过Values表达式来构造一个简单的维表。此外,目前还可以在Select语句中省略from表达式,相当于Select一个一行的values。



第二个新增的语法叫做“Common Table Expression(CTE)”,简单而言CTE可以让用户通过使用WITH语句将子查询提前,而踢到前面的SubQuery可以被反复使用,即所谓的Common Table,而且Common Table之间可以相互引用。此外一个新增的语法及时“SEMI/ANTI JOIN”,这两个语法其实算是SQL标准的功能,SEMI JOIN的语义是当JOIN条件满足的时候返回满足条件的行,而ANTI JOIN与之前恰好相反,就是当JOIN条件满足的时候就过滤掉满足条件的行,保留不满足条件的行返回。

MaxCompute 2.0还支持了更加丰富的子查询表达式,在MaxCompute 1.0中只支持了IN的SubQuery表达式,而在MaxCompute 2.0则引入了两种新表达式,一种是EXISTS表达式,其含义是当后面的表达式有结果返回时为TRUE,否则为FALSE;另一种叫做SCALA SubQuery,也就是当后面的子查询能够确定是一行一列的时候,子查询可以当做标量使用,进而可以参与其他表达式的计算。此外,在MaxCompute 2.0子查询中支持了correlated,这使得子查询的结果不再是固定的值,而是会根据外部表的行进行改变。

MaxCompute 2.0提供的另外一个重要功能就是“SELECT TRANSFORM”,该语法完全与Hive兼容,其允许用户使用第三方脚本来处理数据。另外一个引入的新功能是“User Defined Type”,这是MaxCompute独有的功能,这个功能非常好用,其允许用户直接在SQL中嵌入第三方语言,目前只支持了Java。使用new就可以创建对象,可以直接调用对象公共方法和访问公共属性,而且整个JDK都可以直接使用,还可以通过设置odps.sql.session.resources引用第三方包。



MaxCompute 2.0还支持外表和非结构化存储,简单而言在MaxCompute 1.0里面,用户只能引用内部定义的表,比如创建表之后将数据上传上去才能够使用。而目前的过程完全可以利用外表来实现,用户可以定义和创建一个外表,可以直接从外部数据源读取数据,这样就省略了数据迁移的过程。而外部数据和内部数据的存储肯定不一致,因此MaxCompute 2.0还引入了对于非结构化数据进行处理的机制,比如通过定义StorageHandler来处理非结构化存储的序列化、反序列化以及读写过程。值得注意的是MaxCompute 2.0的外表在语法等方面完全兼容Hive,因此Hive用户可以非常轻松地向MaxCompute 2.0进行迁移。

MaxCompute 2.0还提供了“CLUSTERED BY”功能,我们可以在创建表的过程中指定表按照某一列进行CLUSTERED BY,这将会为表建立一个聚集索引,能够使用户在查询中利用索引进行优化,减少读入的数据量。还有一个新功能就是“User Defined Join”,借助此功能用户可以自定义表的连接过程,原本的内置JOIN过程都可能会产生笛卡尔积结果,可能做了过多的爆炸式展开,而通过User Defined Join将会大大减少中间结果的产生。



脚本模式
MaxCompute 2.0提供了脚本模式功能,在脚本模式下,用户所提交的脚本不再是以单条SQL为单位的,而是以整个脚本为单位提交查询,因此更适合复杂的查询。此外,脚本模式可以使用DDL语句,并且可以有多个不同的输出,可以有多次insert into以及多个insert override等,所以脚本模式能够最大限度地帮助用户编写复杂的逻辑。虽然脚本模式中,脚本是按照一整个脚本提交的,但是并不会逐条执行,而是将整个脚本作为一个完整作业执行,其优点就是对于一些重复操作可以合并到一起。



参数化视图
在MaxCompute 1.0版本的视图定义中,并不允许传递参数,但是在2.0版本中则引入了参数化视图功能,该功能允许用户在定义VIVIEW时候定义参数,根据参数的不同使得VIEW的逻辑会出现一系列变化,这样就能够大大提升VIEW代码的重用能力。如果能够设计得很好,那么用户的绝大部分逻辑都能通过VIEW基于过程的过程方式实现。



MaxCompute Studio
MaxCompute 2.0提供了对于IDE的强大支持,其在开始研发的过程中就伴随这MaxCompute Studio的设计和实现了。而MaxCompute Studio也提供了一些非常重要的功能,比如作业监控、作业分析、实时错误提示以及智能提示等。通过MaxCompute Studio,用户可以非常直观地监控作业的执行流程,帮助用户直观地掌控执行流程中的各个节点信息;此外,MaxCompute Studio还提供了一系列分析工具,帮助用户分析参与作业的各个节点的执行信息等;此外,还提供了很多对于SQL开发的支持功能,比如用户在MaxCompute Studio中做编辑的时候,就会把用户的脚本做本地编译,并发现其中存在的问题,然后以图形化方式报告给用户;另外一个就是实现了上下文提示,提示功能非常智能化,而这在开发脚本的过程中也是非常有帮助的。



即将上线的功能
除了上述功能之外,MaxCompute 2.0版本中还有如下图所示的很多即将上线的功能,比如GROUPING SETS和CUBE/ROLLUP、INTERSECT/EXCEPT、内存计算、Java Runtime与Local run、更完善的脚本语言支持以及Table API支持等。



三、MaxCompute 2.0 vs 竞品

Hive兼容模式
最后与大家简单介绍一下MaxCompute 2.0与其他竞品的区别。之所以介绍这一点,是因为一些用户期望从其他的产品上向MaxCompute 2.0进行迁移,希望能够对于MaxCompute所支持的功能以及难度有一个直观的了解。其实,MaxCompute 2.0对于Hive具有非常强的兼容能力,当用户通过设置“SET odps.sql.hive.compatible=true;”就可以打开Hive兼容模式。在兼容模式下,不仅能够兼容Hive的语法结构,还能够对于数据类型、语义以及UDF和StorageHandler进行兼容。当打开MaxCompute 2.0的兼容模式,那么在Hive上运行的应用就能够非常方便地迁移到MaxCompute 2.0平台上来。当然了,MaxCompute 2.0与Hive还存在一些在设计上的不兼容的地方,比如某些操作和MaxCompute概念不符合,比如database、schema等,因此没有支持;在权限管理上,某些方式和MaxCompute不符,如column的权限管理,没有支持。MaxCompute的resource是全局的,因此某些操作,如CREATEFUNCTION需要指定resource。而这些不兼容的地方,对于用户也没有太大影响,因此对于用户而言,从Hive向MaxCompute进行迁移是非常方便的。而在MaxCompute在未来也将会支持任何符合SQL标准的语法。



MaxCompute 2.0核心优势
MaxCompute 2.0除了在兼容方面做得比较好之外,还存在着很多的核心优势。首先,最大的优势就是MaxCompute是企业级服务,能够提供7*24小时不间断服务的系统级平台,会有专业人员对于问题进行支持。MaxCompute 2.0具有包容的生态圈,大家可以从各个平台上迁移过来,从而实现完整统一的计算系统。此外,MaxCompute 2.0所提供的更丰富的扩展能力能够让用户更方便地扩展SQL能力。脚本模式和参数化视图能够让用户用脚本方式开发复杂的逻辑,从而实现复杂的功能。MaxCompute Studio所提供的强大的开发调试的支持,也是企业竞品所没有的。在经过一系列的改进之后,MaxCompute 2.0的执行引擎、优化器都是用了最新的算法模型和框架,因此性能不会输给任何竞品,并且已经经过了内部无数次验证,因此用户可以放心使用。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android顶部导航高度,Android特效——————底部/顶部导航条(Fragment+ViewPaper+XTabLayout)...

初次使用xtablayout和viewpaper2.所以就弄了最基础的导航条一、效果二、代码配置环境【在bulid.gradle中添加以下代码】implementation ‘androidx.viewpager2:viewpager2:1.0.0-alpha02‘implementation‘com.androidkun:XTabLayout:1.1.4‘按钮点击切换图片【几个点击按钮图片…

Apache JMeter 压试 HTTP接口

压测模拟100个用户连续发10次起请求 总请求数量线程数*循环次数1. 设置线程数 2. 查看服务端输出 3. 查看结果树 4. 查看聚合报告

Apache孵化器主席Justin Mclean:如何成为Apache顶级开源项目

近日,Apache孵化器主席、Apache基金会成员、Dubbo & RocketMQ等开源项目的导师Justin Mclean来到阿里巴巴西溪园区,与众多开发者分享了如何打造一个Apache顶级项目,以及项目孵化过程会遇到的一些盲点和挑战。 经Justin Mclean先生本人允…

正式开源TKE和TBase,腾讯正成为大数据领域开源最全面厂商

在11月6日召开的Techo开发者大会上,腾讯云副总裁、腾讯数据平台部总经理蒋杰博士正式对外披露腾讯大数据平台10年技术演进历程。 经过10年的积累,腾讯大数据平台的算力资源池目前已有超过20万台的规模,每天实时数据计算量超过30万亿条&#…

服务化改造实践(三) | Dubbo + Zipkin

随着业务的发展,应用的规模不断的扩大,传统的应用架构无法满足诉求,服务化架构改造势在必行,以 Dubbo 为代表的分布式服务框架成为了服务化改造架构中的基石。随着微服务理念逐渐被大众接受,应用进一步向更细粒度拆分&…

基于TableStore的亿级订单管理解决方案

一、方案背景 订单系统存在于各行各业,如电商订单、银行流水、运营商话费账单等,是一个非常广泛、通用的系统。对于这类系统,在过去十几年发展中已经形成了经典的做法。但是随着互联网的发展,以及各企业对数据的重视,…

mybatis-plus的 mapper.xml 路径配置的坑

mybatis-plus今天遇到一个问题,就是mybatis 没有读取到mapper.xml 文件。 #实体扫描,多个package用逗号或者分号分隔 mybatis-plus:typeAliasesPackage: com.gblfy.springboot.mybatisplus.entitymapper-locations:- classpath*:com/gblfy/springboot/*…

加速布局无服务器生态,腾讯云与Serverless.com达成全球战略合作!

在云计算技术领域,“Serverless(无服务器)”作为一种新型的软件设计架构正在快速崛起。作为继虚拟机、容器后的第三代通用计算平台,Serverless技术也一直是腾讯云原生的重点发力领域。 近日,在由腾讯云主办的首届Tech…

阿里云周源:一篇文章读懂四代视频加密技术演进

在刚刚圆满落幕的LiveVideoStackCon峰会上,阿里云高级技术专家周源进行了《视频加密和DRM的实施实践》主题分享。周源,有十多年音视频研发经验,之前在淘宝视频负责开放平台,目前在阿里云视频云部门负责媒体处理,在大规…

云原生数据库如何打造业务弹性

云计算带来了业务弹性上的极大优势,阿里云数据库高级产品专家时慢从应用架构的变迁,客户实战案例,业务分析等方面详细介绍POLARDB,及如何利用POLARDB设计互联网创新型应用的数据库架构。 应用架构的变迁——为什么我们需要超级MyS…

SpringMVC 集成 mybatisPlus

文章目录一、基础配置1. pom2. web.xml二、配置文件2.1.spring-context.xml2.2. spring-datasource.xml2.3. spring-mvc.xml2.4. jdbc.properties2.5. logback.xml三、基础类3.1. 实体类3.2. 接口类3.3. 接口映射xml3.4. service接口3.5. 接口实现类3.6. 控制层四、数据库方面4…

四大开源项目联合发布 腾讯已成Github全球贡献前十公司!

近日在Techo开发者大会上,腾讯正式对四大重点开源项目进行了联合发布,包括分布式消息中间件TubeMQ、基于最主流的 OpenJDK8开发的Tencent Kona JDK、分布式HTAP数据库 TBase,以及企业级容器平台TKEStack。 截至目前,腾讯已经在Gi…

实践 | Sentinel 扩展性设计

Sentinel 提供多样的 SPI 接口用于提供扩展的能力。用户可以在用同一个 sentinel-core 的基础上自行扩展接口实现,从而可以方便地给 Sentinel 添加自定义的逻辑。 初始化逻辑扩展机制 为了统一初始化的流程,我们抽象出了 InitFunc 接口代表 Sentinel 的…

android 各版本市占率,Android各版本市占率:果冻豆遥遥领先

近日,谷歌公布了最新Android系统各版本的市场占有率。虽说已发布两年之久且推出三个版本的果冻豆系统出现了小幅下滑,但60.8%的市占率依然遥遥领先其它各版本。Android各版本市占率:果冻豆遥遥领先(图片来源于cnbeta)从 谷歌统计数据显示&…

腾讯首度披露基础架构演进史:“海量之道”进化“生而为云”

近日腾讯Techo开发者大会在北京召开。会上腾讯云副总裁、云架构平台部总经理谢明首次对外披露了腾讯基础设施演进与创新历程。他介绍在微信、QQ等国民级业务不断发展的背后,包括服务器、网络、IDC、计算、存储、数据库等在内的基础设施和技术架构一直在不断进化&…

阿里云专家穆轩的《杭州九年程序员之“修炼”手册》

对于一个从未到过南方的内蒙汉子来说,北京的大学一直是中学时憧憬的殿堂,而离家上千公里浙江大学,则是从来没有考虑过的地方。机缘巧合之下,被一位年近七旬的浙大老师说服,我自此开始了南下“修炼”之旅。没想到转眼间…

主流开源开发者工具落地阿里云,进一步提升开发者体验

在云计算大数据时代,企业的不断上云,业务的不断发展,技术架构的不断演进,导致资源、应用和数据的管理成本不断增加,运维难度不断加大。业务场景的不断和复杂和变化,不得不引起我们更多的思考: …

SpringBoot 集成 mybatisPlus

文章目录一、1. pom2. application.yml3. dao层接口集成baseMapper4. 启动类上扫描5. 创建数据库6. 初始化表结构7. 浏览器验证8. 源码地址一、 1. pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/P…

让开发变得更简单 | 阿里云中间件推出全新开发者服务

要码出未来&#xff0c;除了程序员专属的节日福利&#xff0c;还需要实打实的为程序员解决手头的难题。 10月24日&#xff0c;阿里云中间件推出全新开发者服务&#xff0c;发布3款开发工具&#xff0c;包括Alibaba Cloud Toolkit 、链路追踪Tracing Analysis和应用高可用服务AH…