MaxCompute2.0新功能介绍

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

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

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

1、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上。最后一点,还须要利用最新的分布式计算框架来优化执行引擎,从而使得执行的效率更高。分布式

图片描述

2、MaxCompute 2.0 vs 1.0ide

前面所讲的更多的是站在系统层面进行分享,接下来将围绕你们平常开发使用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支持等。

图片描述

3、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的执行引擎、优化器都是用了最新的算法模型和框架,所以性能不会输给任何竞品,而且已经通过了内部无数次验证,所以用户能够放心使用。

图片描述

相关文章
相关标签/搜索