摘要:距离上一次MaxCompute新功能的线上发布已经过去了大约一个季度的时间,而在这一段时间里,MaxCompute不断地在增加新的功能和特性,比如参数化视图、UDF支持动态参数、支持分区裁剪、生成建表DDL语句功能等功能都已经得到了广大开发者的广泛使用。那么,近期MaxCompute究竟还有哪些新特性呢?本文就为大家揭晓答案。
本文作者:曲宁,阿里云智能计算平台事业部产品专家
以下内容根据视频以及PPT整理而成。
MaxCompute与阿里云大数据产品解决方案
在介绍MaxCompute新功能前,我们先快速对阿里云的大数据产品解决方案进行介绍,以便不熟悉MaxCompute的朋友能快速建立认知。
阿里云大数据解决方案中包含了数据接入、数据存储及处理分析、数据服务以及在线应用等这样的几个维度。通常的情况下,基于MaxCompute和阿里云大数据解决方案搭建的系统会通过DataWorks实现离线多源异构数据的同步,并向MaxCompute大数据平台加载数据。与此同时,借助于DTS日志服务、Kafka消息队列服务实现对实时数据的收集。之后,通过流式计算服务实现对于数据的实时计算和分析,并将数据投递到实时在线的服务或者回流到统一的数据仓库服务中去。数据落盘保留下来之后,将进行数据仓库相关的处理分析,加工成为可以被业务消费、高质量的数据集。同时,利用机器学习平台可以开展包含数据准备、模型训练、模型部署在线推理在内的完整智能应用。
在数据服务(data serving)维度,阿里云大数据产品解决方案中也提供了多种的服务,包括了关系型数据库、分析型数据库、ES等,这些服务能够帮助用户加速在面向在线应用场景下的数据消费。同时,阿里云大数据产品解决方案还能够与阿里云线上的Quick BI、DataV以及第三方客户自行购买的BI等工具进行结合。在云上大数据场景下,DataWorks则承担的是整体的数据开发、编排调度以及数据管理的职能。
What's New?MaxCompute产品近期发布预览
本次分享面对的主要群体是对于阿里云MaxCompute产品有所了解并且有一定使用经验的客户,因此所介绍的内容会比较细致,但不会过多展开相关背景及原理介绍,更多地会面向MaxCompute已有的问题以及新推出的特性本身进行分享。
近期以来,MaxCompute大约每三个月就会迭代一个大版本发布到线上,而中间则会有很多个小版本。到8月份的时候,已经距离上次MaxCompute线上发布会经过了大约一个季度的时间,因此需要再做一次新特性的发布。所以本次分享不仅涵盖了MaxCompute针对日常需求的功能发布,也包括了大版本发布的内容。
本次所要介绍的MaxCompute产品近期的发布情况主要包括三个部分,首先是近几个月已经陆续发布上线,并且产品文档已经完备的功能,希望希望通过本次介绍让开发者能够更好地了解这些新的功能;其次是目前MaxCompute在线上所正在做的大版本升级中已经实现的一批灰度升级项目,本次也会对于其中一些比较成熟的功能进行分享;最后就是一些即将面向更大规模的用户进行发布的功能,也就是目前还处于定向内测阶段的功能。
新Region开服:西南成都节点正式开服、国际Region提供Spark服务
随着阿里云西南成都节点的正式开服,大数据计算服务MaxCompute也正式在西南成都节点开服售卖。与此同时,MaxCompute也提供了很多国际的Region,阿里云根据用户需求的强烈程度优先在香港、德国、新加坡、印度和美西这五个国际Region推出了Spark服务。
新功能:SQL-参数化视图
MaxCompute近期发布上线的版本围绕着SQL核心功能的一些细节做了大量的优化和提升,其中一点就是参数化视图。MaxCompute传统的视图(VIEW)中实现了一定的封装与重用,但是并不接受调用者传递的任何参数,例如:调用者无法对视图读取的底层表进行数据过滤或传递其它参数,导致代码重用能力低下。MaxCompute近期发布上线的版本的SQL引擎支持带参数的视图,支持传入任意表或者其它变量来定制视图的行为,从而增强了视图的可用性和复用度。
新功能: SQL-UDTF/UDAF支持动态参数
新发布的MaxCompute版本的SQL能够支持UDF相关的动态参数。如下图中的代码所示,其中含有一个命名为JsonTuple的UDTF。这里JsonTuple的业务需求就是首先读取一个JSON串,其中包含了一系列JSON内容,并且需要解析其中某些节点的信息。
面对像JsonTuple这样的函数设计,虽然给定了一个JSON,但是可能需要根节点的参数,也可能需要根节点+子节点或者多个子节点的参数去提取并解析JSON字符串中的信息,此时就造成了函数的不确定性,因此函数最好能够支持用户动态的参数输入,也就是可以根据用户的动态参数输入提取相应的信息。MaxCompute的UTDF和UTAF在参数列表中支持使用*的模式,表示接受任意长度、任意类型的输入参数,从而满足了上述场景的需求。
新功能: SQL-UDT支持资源(Resource)访问
User Defined Type,简称UDT,它属于最近几个版本MaxCompute的SQL里面推出的比较新的功能,目前应用也不是非常广泛。UDT是MaxCompute 2.0之后主张使用的NewSQL能力,其允许在SQL中直接引用第三方语言的类或者对象,获取其数据内容或者调用其方法。目前,MaxCompute的SQL中的UDT提供的是对于Java UDT的支持。举例而言,如果想要在MaxCompute中获取整数中的最大值,通常需要自己写一个UDF函数并通过其他语言实现出来,而其实在像Java这样的高级语言中的一些内置方法就能够实现,因此可以简单地使用Select Java库中的一个方法来获得相应的能力。这是之前所发布的UDT本身的能力,而今天要发布的新特性则是UDT对于MaxCompute中资源访问的支持。MaxCompute中有很多种对象,其中一种就是资源,比如一些数据文件。MaxCompute可以使用SQL通过Resource读取文本文件,也可以通过Set参数的方式将自定义的JAR作为UDT能够直接访问的一个库,并在UDT当中使用用户自定义的第三方库。
新功能:SQL-UDF支持分区裁剪
MaxCompute本身有大量的分区表,在分区的使用中一个很重要的优化点就是通过分区裁剪的方式在查询中过滤分区。在过滤分区的时候,有时需要使用一些自定义的逻辑,通过一些自定义的功能来确定分区的范围。当增加一个UDF时往往会发生全表扫描,这是因为在提交查询的时候还不能确定提交的分区到底是哪个,因此会发生全表扫描,进而带来比较高的费用和更重的负载。
新发布的MaxCompute版本中的SQL已经能够支持UDF分区裁剪的能力了。其逻辑是当提交的SQL存在UDF的时候,会首先将UDF单独提取出来执行,将UDF的执行结果拿到之后再和原来的查询语句进行拼装再提交。这样一来,当存在动态不确定的信息时,首先会解析动态信息,再确定分区范围,从而进行分区裁剪,尽量减低数据扫描所产生的费用。其开发方式就是在UDF中加一些参数,就能够使得UDF支持分区裁剪。
新功能:SQL-生成建表DDL语句功能
很多开发者都有将项目中数据表的DDL导出来的需求,新版本的MaxCompute也提供了兼容Hive的SHOW Create table + 的方式。从下图中的案例也可以看出,使用SHOW Create table + 之后就能够获得该表的DDL的脚本,通过这种方式就能够实现重建表或者做表结构备份的工作。
新功能: SQL-支持指定表的列默认值
新版本的MaxCompute中也支持了指定表的列默认值。其实熟悉大数据发展历程的同学们都应该有所了解,数据库中存在很多比较完善技术,比如在校验机制、约束条件上都提供了各种默认值可供开发者选择。而大数据技术在这些方面所做的远远不够,目前的发展趋势是在数据的质量和数据的校验等方面工作中,大数据技术越来越靠近数据库技术。在MaxCompute最新的版本发布中提供的DEFAULT VALUE就允许了用户创建数据表的时候去指定默认值。
在上图的代码示例中,创建了一个表T,表T中包含了a、b两列,这两列的数据类型都是bigint,并且a的默认值设为10。当向这个表中插入数据记录并且只对于字段b进行插数据的时候,MaxCompute会自动地在结果当中将a的值按照默认值补齐,其等效于同时在a列中插入10并且在b列中插入100。这样的功能在很多场景下用处还是比较大的,比如某些字段默认设置为0或者为空的情况。
新功能: SQL-支持LIMIT OFFSET
之前的时候,很多用户也有这样的一个呼声,就是希望在MaxCompute的SQL上面做到像MySQL、PG这些数据库一样的分页功能,能够定位到在多少行之后取多少行数据,这样的功能在数据库中是非常通用的。以前,在MaxCompute的SQL里面通过为每一行数据打一个唯一标示Row Number,再用Between And这样的方式来变相地实现分页功能。而在新版本的MaxCompute中,SQL本身就已经原生地支持了LIMIT OFFSET的语法,可以更加容易地实现分页的需求。
新功能:SQL-新增内置函数JSON_TUPLE、EXTRACT
接下来介绍MaxCompute的SQL中两个比较实用的函数——JSON_TUPLE和EXTRACT。MaxCompute本身在之前对于字符串的处理只有一个getJsonObject()内建函数,而只有这样的一个函数是比较痛苦的,因为在构建JSON串的时候往往需要多次调用这个内建函数来获取某个节点的值。
而新增的JSON_TUPLE函数则解决了这些问题。使用JSON_TUPLE首先可以获得一个JSON字符串,该函数的参数则可以是多个动态的参数,比如想要获取10个节点的值就可以带10个参数,而且还适合使用嵌套式数据,因此JSON_TUPLE将来也会成为开发者使用较多的内建函数。此外,新版本MaxCompute的SQL中还支持了EXTRACT函数,能够按年、按月、按日、按小时、按分钟来截取日期。因为对于日期的处理也属于高频操作,因此EXTRACT函数也将会被高频地使用。
新功能-分区管理
除了前面提到的MaxCompute在SQL中的一些增强功能之外,新版本的MaxCompute还提供了一些其他的能力,比如分区管理的能力。在分区管理部分,一个比较重要的场景就是由于开发者往往喜欢使用较多的分区,而当数据量大的时候可能会造成多级嵌套分区,因此表的分区数量就会非常庞大。而MaxCompute本身对于分区数量存在一个上限,当数据分区过多的时候就需要将历史过往的分区进行合并,并且删除不必要的分区。
分区管理的最佳实践就是在数据比较“热”的情况下,分区切分得可能会比较细,当数据沉淀时间比较长的时候,过往的历史数据被访问的频率就会比较低,因此可以通过分区归并的方式减少分区的数量。过去删除分区的时候也是比较痛苦的,需要每次通过drop partition来删除一个分区,而现在MaxCompute在drop partition命令里面也支持了一次删除多个分区的能力,可以通过一次操作删除多个分区。
新功能-预付费资源监控报警
预付费资源监控报警是MaxCompute近期发布的一个新功能。阿里云MaxCompute的很多用户使用的都是预付费的固定CPU大小的资源组,在这种场景下,用户往往会更加关注购买的资源是否过多,在业务高峰期能否将其充分地利用起来,是否需要需要扩容或者缩容等。与此同时,用户还需要对于一些关键任务进行监控,比如在作业排队比较严重,产生积压的情况时,也希望能够通过监控报警系统获得排队积压信息,并且及时告警,从而更加利于人工及时进行干预,保证当核心业务出现问题时能够得到及时处理。
MaxCompute所提供的预付费资源监控报警能力基于阿里云所提供的云监控服务,并且结合了配额组CPU使用量、作业等待等待数、内存使用量、整体CPU使用率等一些关键指标,通过对以上这些指标进行规则配置,就能实现对于关键事件的短信通知以及实时告警,从而帮助用户更好地管理和使用资源。
新功能-IP白名单支持IPV6
目前,IPV6已经成为阿里云整体都会支持的能力,而MaxCompute本身也支持了IPV6。对于IP白名单这个安全特性而言,过去MaxCompute支持IPV4,目前也扩展支持了IPV6,使用方式与原本的IPV4差异不大,通过白名单列表的设置就能够同时支持IPV4和IPV6。
新规格:预付费套餐(计算资源+存储资源)发布
前面为大家介绍了MaxCompute在新版本的发布中的一些功能,接下来将为大家介绍MaxCompute的一种新规格。新版本的MaxCompute中推出了预付费套餐(计算资源+存储资源)的规格。对于MaxCompute而言,主要有两种付费形式,其中一种是按量付费,这种方式具有极致的弹性,并且能够自动伸缩;另外一种是按作业付费,这种方式比较符合期望的财务支出,在性价比方面更具有优势。
本次新发布的预付费打包套餐和之前的固定资源配额都属于固定规格预付费方式。预付费套餐的售卖方式为混合付费,在开通时以包年包月方式购买计算资源(主要为CU)和存储资源。使用时,公网下载流量和超出的存储容量按使用量收费。总体而言,预付费套餐相当于是对用户的优惠套餐,相比于企业客户在线下自行搭建的大数据常用配置的计算和存储规模,阿里云本次所推出的预付费套餐将会提供一个十分具有竞争力的价格,这样一来既能够保证企业每月的财务支出比较稳定,同时也能够提供较高的性价比。
体验优化:文档持续优化及最佳实践指引
MaxCompute团队一直以来都非常注重产品文档的质量和体验,也在进行着持续地优化,并在社区中也和广大的开发者保持着密切的交流和互动,获取了开发者在MaxCompute产品使用以及产品如何应用到生产的过程中的一些需求。MaxCompute团队近期也将一些重点的、高频的问题沉淀下来,形成了文档化、案例形式的实践指导,发布到了官网上面。
这些文档包含了如何基于MaxCompute构建和优化数据仓库,同时也提供了一些数字化运营的具体案例,比如如何基于MaxCompute搭建互联网在线的运营分析平台。此外,因为Python生态广受欢迎,开发者也是人数众多,因此PyODPS也受到了很多Python开发者的支持,通过前一个阶段的反馈,MaxCompute团队也发现PyODPS在文档方面存在一些不足之处,因此近期也做了专项整理。MaxCompute团队整理了PyODPS的一些指导文档和具体示例,大家可以到官网上去查看最新发布的指导文档和案例。
新功能内测:元数据服务Information_Schema
前面分享的是MaxCompute新版本中的一些线上可用的功能,而在实际上还有一些功能目前处于内部定向邀请测试阶段,这些功能也是社区中很多开发者以及企业客户所非常看重的功能。这里为大家介绍两个处于内测阶段的功能,其中第一个就是元数据服务。MaxCompute本身是一个多租户的系统,用户使用的时候非常希望将更多的数据以更加友好的方式开放给使用者,能够帮助使用者自助地了解项目中的一些信息,其中比较常见的就是元数据信息,比如Table、Partition、Column、UDF、Resource、User等信息。以往这些信息都是通过命令的方式获取,但是当元数据量非常大的时候,很难通过这种方式去获得或者检索和过滤信息。而在传统的数据库技术领域有非常多的解决方案,因此MaxCompute中也提供了Information_Schema这样的一套服务,在遵循规范的基础之上也添加了一些MaxCompute特有的视图和字段,既能够满足开发者原有的一些使用习惯,也能够更好地结合MaxCompute本身的一些特点。
通过内建服务,MaxCompute首先会为用户提供一个Information_Schema库,用户可以去自助地去访问相关的元数据信息,比如项目中的表格、字段、视图、创建人、创建时间以及表的大小和生命周期等。通过这种方式就能够对于表的全局信息有一个很好的把控。与此同时,MaxCompute也会提供准实时的作业历史明细的查询能力。作业历史包含了日常的实例信息、SQL的作业明细等。以往是通过show instance等命令获取近期执行作业的信息,而如今可以通过对于视图的查询方式来获取本项目所有作业信息,并且能够通过一些过滤条件筛选出自己所需要的作业信息。所查询出来的信息则包括了项目类、项目名称、作业提交时间、作业状态、作业的SQL语句、数据的扫描量、复杂度以及资源消耗等信息,基于对于这些信息的统计就能够实现很多的性能优化以及诊断等相关工作。元数据服务Information_Schema这样的能力也会在近期面向全体云上用户进行公测。
新功能内测:基于ActionTrail的行为审计日志服务
另一个要介绍的处于内测阶段的功能就是基于ActionTrail的行为审计日志服务。对于阿里云MaxCompute团队而言,经常会有企业提交工单希望能够帮助他们检查一下某张表的数据被谁删除了,或者某个账号近期是否进行了数据下载。因此,MaxCompute也将要推出基于ActionTrail的行为审计日志服务,这款服务能够完整地记录项目内的用户操作行为,并通过接入阿里云Action Trail服务将MaxCompute用户行为日志实时推送给客户,满足客户实时审计、问题回溯分析等需求。被审计的行为包含了对于表的创建、删除以及对于表结构的变更、写入数据、下载数据等,而日志信息也包含了企业比较关心的客户端信息、操作的具体SQL内容、提交人、提交时间等关键信息。