本文为您提供关于MaxCompute使用功能的各项更新记录。

2023年05月10日-MaxCompute服务升级公告

尊敬的MaxCompute用户:

为了提升MaxCompute网络容灾能力,MaxCompute将于北京时间2023年05月24日(周三)15:00:00 ~ 16:00:00 升级华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳)、西南1(成都)地域。

在升级过程中,MaxCompute接入层进行网络变更,需要在域名中增加A记录,通常情况不会影响您的正常使用;但是如果您在CEN或专线网络打通并且在路由表里配置了MaxCompute的VIP地址,则需要及时与阿里云技术支持人员沟通,并将新的VIP增加到路由表中。

此次升级给您带来的不便,望您谅解,如您有任何问题,可随时通过工单或者服务热线与我们联系。

感谢您的配合!

2023年04月06日-MaxCompute新版作业运维发布公告

尊敬的MaxCompute用户:

MaxCompute将于北京时间2023年04月06日(周四)起开始陆续发布MaxCompute的新版作业运维功能,新版作业运维将提供全量MaxCompute作业运行列表进行运维管理。如果您是数据开发人员,作业运维功能方便您日常查看、终止MaxCompute作业。如果您是管理员,作业运维功能方便您日常结合配额组查看某时刻的资源负载、终止MaxCompute作业。

新版作业运维同时满足查看作业快照信息和作业当前信息,您可以通过时间范围参数输入开始和结束时间实现:
  • 过滤在这个时间范围内执行完成的作业。
  • 过滤在结束时间或往前3分钟正在运行的作业,会有作业快照信息,这个时间也称为作业快照观测时间。
更多新版作业运维介绍请参见作业运维(新版)

感谢您的配合!

2023年03月28日-MaxCompute新版控制台发布公告

尊敬的MaxCompute用户:

MaxCompute将于北京时间2023年03月28日(周二)开始陆续发布MaxCompute的新版控制台。新版控制台将采用全新的域名地址,会先从中国内地公共云地域开始陆续发布新版功能,在陆续发布期间,未发布的地域会将老版本控制台嵌入到新版地址中

MaxCompute新版控制台将提供全新的项目管理、Quota(配额)管理同时集成全新功能:弹性预留CU、自定义项目管理类角色。
  • 新版控制台与老版本控制台对比。
    • 访问控制。

      访问新版控制台进行相关管理操作需要有MaxCompute相关的权限策略,详情请参见RAM权限

    • 项目管理。
      • 创建项目。

        老版本是在创建DataWorks工作空间的同时创建MaxCompute项目;新版本是直接创建单个MaxCompute项目。因此建议您继续通过DataWorks创建使用MaxCompute项目。

      • 删除项目。

        老版本可以删除有关联DataWorks工作空间的项目,并在删除前要求先在DataWorks上进行项目解绑,同时支持逻辑删除(逻辑删除后可恢复)和立即删除;新版本支持删除所有MaxComputes项目,只支持立即删除不支持逻辑删除,另外需要注意删除时不感知项目与DataWorks项目空间的关联性,因此需要在删除前需自行确认与DataWorks工作空间解绑以免删除后DataWorks项目空间不能正常操作使用。

      • 项目状态变更。

        老版本中项目状态除了随订单实例生命周期变化,支持自定义逻辑删除、恢复的状态变更;新版本项目状态同样随订单实例周期变化,同时支持自定义禁用、恢复项目。

      • 项目切换默认Quota。

        老版本可以更新关联DataWorks工作空间的项目,并在DataWorks页面进行更新,若工作空间为标准模式则同时变更对应两个项目;新版本支持所有正常、停服状态项目变更切换,每个项目独立变更。

      • 项目参数配置。

        老版本控制台没有提供界面化项目参数配置;新版本将常用的项目基础属性、权限属性、IP白名单设置都进行界面化,有权限操作的账号可直接通过新版控制台界面进行相关操作。

      • 项目权限管理。
        老版本控制台没有提供界面化项目权限管理;新版本提供界面化项目角色管理和Package管理(管理权限校验与命令方式一致),通过角色进行权限管理。
        • 项目角色:支持创建Resource和Admin类型角色,支持ACL、Policy方式进行角色授权。ACL方式授权支持所有对应Project对象(Table、Function、Resource、Package、Project)进行授权操作,通过界面操作实现批量授权。
        • Package:支持界面化创建、授权、安装Package等操作,通过界面操作实现批量授权。
        说明 DataWorks的工作空间管理页面将下线MaxCompute Project的角色管理功能,此管理功能与MaxCompute新版控制台的权限校验逻辑不一样。若您使用非中国内地公共云地域,且只能通过RAM账号或RAM角色进行管理,那么您可提前通过DataWorks页面进行一些MaxCompute项目权限管理配置,以便后续RAM管理账号可通过MaxCompute控制台进行项目管理。
    • Quota管理。
      说明 暂时仅华东2(上海)、华东1(杭州)、华北2(北京)、华南1(深圳)、华北3(张家口)、西南1(成都)地域支持Quota管理,其他地域支持情况会另行通知。
      即MaxCompute管家中的配额管理,新版控制台提供全新的Quota管理交互。
      • Quota列表。

        展示一、二级Quota列表,相关参数属性为当前Quota的属性。

      • 资源消耗。

        查看对应一级Quota的相关CU消耗趋势图,与当前管家概览CU使用趋势一致。

      • 升级、降配、续费。

        对一级Quota进行操作,即对对应实例进行升级、降配、续费。

      • Quota配置。
        对一级Quota下的二级Quota进行拆分配置、分时调度等。
        • Quota模板:创建、删除二级Quota目录。
        • Quota计划:全局视图进行Quota属性和CU量配置,可以按不同时间计划设置不同的Quota配置。
        • 时间计划:支持设置每日不同时段调度使用不同的Quota计划配置,支持半点和整点调度。

          如果原管家中开启了分时Quota功能,则会在新版中按每个时段生成对应的Quota计划,每个Quota计划的名称为p_开始时间点,并在时间计划里配置好每个Quota计划的调度。

  • 新增自定义项目管理类角色。

    在新版控制台的项目管理 > 角色管理,支持自定义创建admin类型的角色,目前admin类型角色只能通过Policy方式授权。通过此类角色,您可自定义安全管理人员的权限范围,如只能进行某个项目IP白名单配置的管理角色、只能进行某个项目数据权限管理的角色等。

感谢您的配合!

2023年03月11日-大数据计算服务MaxCompute PyODPS行为调整

尊敬的大数据计算服务MaxCompute用户:

MaxCompute于北京时间2023年03月11日(周六)对以下PyODPS行为进行调整(适用于PyODPS V0.11.3及以上版本),请您关注了解。
  • MaxCompute引入了新的对象层级Schema(详情请参见Schema操作),其名称与既有表Schema字段重合,因此建议您使用table_schema特指表的Schema。使用schema描述表的Schema信息将会输出警告,但不影响使用。示例如下:
    --# 获取表的 schema 信息。
    t = o.get_table('pyodps_iris')
    print (t.table_schema)  # 获取表 pyodps_iris 的 schema
  • Resource/Function对象上的时间字段(例如creation_time)将默认使用本地时间而非UTC时间,以与Table/Partition上的时间属性字段保持一致。如果您希望仍然使用UTC时间,可以进行如下配置:
    options.use_legacy_parsedate = True
  • 原表与分区的属性字段last_modified_time更名为last_data_modified_time。使用旧的属性名称将会输出警告,但不影响使用。

感谢您的配合!

2023年01月18日-MaxCompute Tunnel共享资源组限流公告

尊敬的MaxCompute用户:

为向您提供更加稳定的Tunnel共享资源服务,MaxCompute将于北京时间2023年03月01日(周三)起按区域为用户设置Tunnel共享资源组最大并发值。

目前MaxCompute各区域均提供公共的Tunnel共享资源组,供该区域用户做数据上传下载使用。本次举措旨在解决由区域内个别用户用量突然增加致使本区域Tunnel共享资源被占用,从而导致本区域其他用户申请不到资源的问题。详情请参见数据传输服务(上传)场景与工具

感谢您的配合!

2023年01月09日-大数据计算服务MaxCompute Subscription存储服务计费异常修复公告

尊敬的大数据计算服务MaxCompute用户:

由于MaxCompute Subscription存储服务的计费配置异常,您此前使用MaxCompute Subscription存储服务的扣费低于基于官网计费机制计算的实际消费金额(该异常不影响MaxCompute Subscription存储服务的使用)。我们将于2023年1月18日(UTC+8)修复该异常,修复后您使用MaxCompute Subscription存储服务的计费将与官网计费机制保持一致,您可通过账单明细查看费用详情。MaxCompute Subscription存储服务的计费规则请见 存储费用(按量计费)

2022年10月13日-MaxCompute Schema功能开放试用公告

尊敬的MaxCompute用户:

MaxCompute Schema功能于北京时间2022年10月13日(周四)起开始开放试用。

MaxCompute推出Schema对Table、Resource、UDF进行归类,Schema是处于Project之下,Table、Resource、UDF之上的对象。您可以在一个Project下创建多个Schema对数据按业务分类存放,功能说明和使用请参见Schema操作

新功能在全站已开放,如需申请试用,请参见新功能测试申请

感谢您的配合!

2022年10月10日-MaxCompute包年包月商品到期停机策略修改公告

尊敬的MaxCompute用户:

MaxCompute国际站包年包月规格商品将于北京时间2022年10月10日(周一)开始修改到期停机策略。

原策略为:到期后若未及时续费,则15天后会停止您的MaxCompute服务,停服后的第15天将会释放资源(所有MaxCompute项目的数据会丢失并且不可恢复)。

新策略为:到期后若未及时续费则立即停止您的MaxCompute服务,停服后若一直未续费激活,则第15天会释放资源(所有MaxCompute项目的数据会丢失并且不可恢复)。

新策略下系统仍然会在商品到期前7天、3天、1天提醒或通知您:请及时续费。同时建议您设置自动续费,避免因续费不及时对您的服务造成影响。

感谢您的配合!

2022年08月30日-MaxCompute odpscmd日常升级运维公告

尊敬的MaxCompute用户:

MaxCompute odpscmd组件将于北京时间2022年08月30日(周二)10:30:00 ~ 11:00:00 升级新加坡、香港地域,北京时间2022年08月31日(周三)10:30:00 ~ 11:00:00 升级上海金融云、香港政务云、深圳金融云地域。在升级过程中通过DataWorks提交的MaxCompute任务小概率会出现ClassNotFoundNoClassDefFoundError等Java类加载异常,出现异常后重试任务即可。此次升级带来的不便,望您谅解。

2022年08月24日-SAMPLE函数升级

SAMPLE函数升级前, sample(10,1) 这类用法的返回结果符合预期,但是后面如果跟上具体Hash列,返回的结果条目数量有可能有误,如果数据分布在大整数范围内,如(10187140, 10189550, 1018910), 则返回结果均为True, 不符合预期。

SAMPLE函数升级后,修正了Hash算法的Final处理方式,优化生成结果的散列效果,避免造成数据分布不均的问题。但可能会与之前旧版本产生结果不相同的问题,注意此问题不是正确性问题,示例如下。
--对于如下SQL语句
select count(*) from (values (10024350), (14564560), (12243560)) as X(a) where sample(10, 1, a)=true;

--升级前返回结果为:
+------------+
| _c0        |
+------------+
| 0          |
+------------+

--升级后返回结果为:
+------------+
| _c0        |
+------------+
| 1          |
+------------+
SAMPLE函数详细使用说明请参见SAMPLE

2022年08月11日-MaxCompute 1.0兼容模式下线公告

尊敬的MaxCompute用户:

自2017年7月起,MaxCompute秉承为客户提供更优的产品服务,陆续进行了MaxCompute2.0引擎升级。

在MaxCompute2.0稳定运行5年后,基于产品生命周期策略的考虑,MaxCompute1.0兼容模式将于北京时间2022年12月20日24:00:00正式下线。

MaxCompute2.0较1.0版本执行更严格的语法检测,所以在MaxCompute1.0编译器下可以正常执行的不严谨语法在MaxCompute2.0中则会报错,具体报错信息及解决方案请参见报错信息及解决方案

自本通知发布到MaxCompute1.0兼容模式正式下线期间,如果您的代码存在撰写不够规范、严谨的情况,请您尽快修改相关的SQL代码。您可通过设置Session flag(set odps.sql.planner.mode=lot;)验证SQL代码在MaxCompute2.0引擎下是否可成功执行。

期间您有任何相关问题需要协助,可以通过您的专属钉群、MaxCompute开发者钉钉群。MaxCompute开发者钉钉群二维码如下。MaxCompute开发者钉钉群

感谢您对MaxCompute的支持!

2021年11月29日-专有网络连接管理产品化发布

MaxCompute支持通过外部表、UDF及湖仓一体等功能访问VPC网络,需要先开通MaxCompute和目标IP或服务,例如Hbase、RDS、Hadoop集群等连通目标的网络连接。

专有网络连接管理于2021年11月29日在上海、杭州、北京、深圳、张家口地域进行产品化发布。专有网络连接管理支持阿里云账号(主账号)或拥有tenant的Super_Administrator和Admin角色的RAM用户(子账号)通过MaxCompute控制台网络资源用户管理页签进行网络连接管理和管理员授权。专有网络连接具体操作步骤请参见网络开通流程。对管理员进行授权请参见角色规划将角色赋予用户

2021年11月1日-查询加速MCQA查询缓存机制商业化发布

对于每个MCQA查询作业,MaxCompute会在内部创建临时数据集来缓存查询结果。使用相同查询的时候会优先使用缓存的结果。缓存结果按每个查询进行维护,使用缓存结果不会产生任何存储及计算费用,在降低使用费用的同时,还可大幅加快执行速度。

2021年10月15日-MaxCompute运维管家维护通知

MaxCompute运维管家将于中国北京时间(东八区)2021年10月15日22:00~24:00进行后台维护,期间MaxCompute管家的配额管理、作业运维等功能暂不可使用,您可在维护工作完成后再继续使用,感谢您的配合!

2021年10月15日-备份与恢复功能商业化

自2021年10月15日起,MaxCompute开始对备份的数据按量计费。

计费规则如下:
  • MaxCompute项目默认自动备份并保留1天内变化的数据版本,且1天内的备份存储免费。即默认情况下,MaxCompute项目免费提供数据保留周期为1天的自动备份能力。
  • 当项目管理员修改备份保留周期超过1天时,MaxCompute将对超过1天的备份数据按量计费,单价为0.0006 USD/GB/天。

更多备份恢复功能信息,请参见备份与恢复。更多存储计费信息,请参见存储费用(按量计费)

2021年9月10日-UPDATE、DELETE和MERGE INTO功能商业化

2021年9月10日起,MaxCompute SQL的UPDATE、DELETEMERGE INTO功能结束免费公测,开始正式计费。已经使用UPDATE、DELETE和MERGE INTO功能的按量计费作业,届时会产生计算费用。如果您之前因为担心公测稳定性问题而暂未使用UPDATE、DELETE和MERGE INTO功能,届时可以放心使用。MaxCompute为UPDATE、DELETE和MERGE INTO功能的相关可用性、稳定性等提供与MaxCompute SQL能力同等的保障。

计费规则如下:
  • 如果MaxCompute项目的计费模式为包年包月,计算费用不单独收费。
  • 如果MaxCompute项目的计费模式为按量计费,计算费用计算规则调整为:单条SQL计算费用=计算输入数据量×SQL复杂度×单价0.0438 USD/GB。其中:SQL复杂度通过SQL关键字个数折算。SQL关键字个数=JOIN个数+GROUP BY个数+ORDER BY个数+DISTINCT个数+窗口函数个数+MAX(INSERT个数|UPDATE个数|DELETE个数-1, 1)
如果您担心费用超出预期,可以配置消费监控告警控制消费。更多监控告警信息,请参见消费控制
您还需要注意如下内容:
  • 如果MaxCompute项目的计费模式为按量计费,MaxCompute会根据UPDATE、DELETE和MERGE INTO语句扫描的输入数据量×SQL复杂度×单价计算费用。当您对Transactional表执行更新或删除操作后会生成Delta文件,Delta文件积累较多后会造成数据膨胀并影响读取性能,也会逐渐增大扫描数据量,增加费用。即使MaxCompute项目的计费模式为包年包月,也会占用更多资源,影响后续作业执行效率。您可以通过Compact方法合并Delta文件,更多语法信息请参见合并Transactional表文件
  • MaxCompute会按照批处理方式执行deleteupdate作业,每一条语句都会使用资源并产生费用,建议您使用批量方式删除或更新数据,请参见更新或删除数据(UPDATE | DELETE)。命令示例如下。
    --推荐方案:使用关联方法,一次改写或删除所有需要操作的数据。
    update table1 set col1= (select value1 from table2 where table1.id = table2.id and table1.region = table2.region);
    
    --不推荐方案:逐行操作。
    update table1 set col1=1 where id='2021063001'and region='beijing';                  
    update table1 set col1=2 where id='2021063002'and region='beijing';
    ......

2021年4月20日-新建MaxCompute项目支持标准的OUTER JOIN ON行为

变更前,无论是否是OUTER JOIN,ON条件中针对单个表的过滤条件,都会在JOIN操作之前对数据进行过滤。例如如下代码中Script 1、Script 2和Script 3的结果是一致的。
--构造数据。
CREATE TABLE t1 AS SELECT * FROM VALUES (1, 20180101),(2, 20180101),(2, 20180102) t (key, ds);
CREATE TABLE t2 AS SELECT * FROM VALUES (1, 20180101),(3, 20180101),(2, 20180102) t (key, ds);

--Script 1:过滤条件在ON中。
SELECT t1.*,t2.* 
FROM t1 
LEFT OUTER JOIN t2 
ON t1.key = t2.key and t1.ds='20180101';

--Script 2:过滤条件在子查询中。
SELECT a.*,t2.* 
FROM (SELECT * FROM t1 WHERE t1.ds='20180101') a 
LEFT OUTER JOIN t2 
ON a.key = t2.key;

--Script 3:过滤条件在WHERE子句中。
SELECT t1.*,t2.* 
FROM t1 
LEFT OUTER JOIN t2 
ON t1.key = t2.key 
WHERE t1.ds='20180101';

这是一个非标准的行为。在Script 1中,如果t1.ds中有不是20180101的值,在标准情况下,LEFT OUTER JOIN应该保留左表全部的值,左关联t2表的数据,匹配返回对应行的数据或返回NULL。但Script 2或Script 3中,t1.ds中不是20180101的值会被过滤掉不再输出,与Script 1的结果不一致。

为兼容标准行为,MaxCompute将修改该默认行为。如果您需要对t1表数据过滤,则应该使用Script 2或Script 3方式。

自2021年4月20日及之后新创建的MaxCompute项目中,OUTER JOIN ON中的过滤条件将不再放在JOIN操作之前进行过滤。对于2021年4月20日之前创建的存量MaxCompute项目,会保留变更前的行为,以免变更对存量作业造成影响。对于存量的MaxCompute项目,推荐您使用变更后的行为方式,设置方法如下:
  • Session级别:在SQL语句前增加set odps.task.sql.outerjoin.ppd=true;命令,与SQL语句一起提交。
  • Project级别:您可以在钉钉群联系MaxCompute技术支持团队将您的项目中的odps.task.sql.outerjoin.ppd配置修改为True。

您可以通过如下示例判断当前MaxCompute项目采用了哪种行为。

--基于上文构造数据。
SELECT t1.*, t2.* 
FROM t1 FULL OUTER JOIN t2 
ON t1.key = t2.key and t1.ds='20180101' and t2.ds='20180101';

--旧的行为返回结果如下。
| key        | ds         | key2       | ds2        |
+------------+------------+------------+------------+
| 2          | 20180101   | NULL       | NULL       |
| 1          | 20180101   | 1          | 20180101   |
| NULL       | NULL       | 3          | 20180101   |

--新的行为返回结果如下。
| key        | ds         | key2       | ds2        |
+------------+------------+------------+------------+
| NULL       | NULL       | 2          | 20180102   |
| 2          | 20180101   | NULL       | NULL       |
| 2          | 20180102   | NULL       | NULL       |
| 1          | 20180101   | 1          | 20180101   |
| NULL       | NULL       | 3          | 20180101   |

2021年4月20日-新建项目的GET_JSON_OBJECT返回行为由JSON保留字符转义变为保留原始字符串

变更前,GET_JSON_OBJECT函数对于字符串类型的返回结果采用了转义的方式进行输出,导致诸如换行符(\n)、引号(")等JSON保留字符使用字符串'\n''\"'显示,这是一个非标准的行为。

变更后,GET_JSON_OBJECT函数会保留原始的字符串,返回行为更标准,处理数据更方便,性能更好。返回值仍是一个JSON字符串,可以继续当做JSON来解析,而不再需要额外使用REPLACE或REGEXP_REPLACE等函数替换反斜线。

2021年4月20日及之后新创建的MaxCompute项目中,GET_JSON_OBJECT函数的返回行为默认为保留原始字符串。2021年4月20日之前创建的MaxCompute项目中,GET_JSON_OBJECT函数的返回行为默认为JSON保留字符转义,以免行为变更对存量作业造成影响。

您也可以通过以下示例判断MaxCompute项目中GET_JSON_OBJECT函数采用了哪种行为,执行命令如下:
select get_json_object('{"a":"[\\"1\\"]"}', '$.a');
--JSON保留字符转义的行为返回:
[\"1\"]

--保留原始字符串的行为返回:
["1"]
推荐您使用变更后的行为方式:
  • Session级别:在SQL语句前增加set odps.sql.udf.getjsonobj.new=true;命令,与SQL语句一起提交。
  • Project级别:您可以在钉钉群中联系MaxCompute技术支持团队,将您的项目中的GET_JSON_OBJECT函数返回行为切换为保留原始字符串的行为。
更多GET_JSON_OBJECT函数信息,请参见字符串函数

2020年12月14日-MaxCompute部分日期函数的输入参数校验行为变更

MaxCompute对部分日期函数的输入参数格式进行严格校验,避免异常输入带来的结果正确性或其它问题。该变更将于2020年12月14日到2021年1月30日陆续对国际站各个区域进行分批升级,请您提前评估项目中相关函数的已有用法,并为升级做准备。具体变更如下:
  • CAST(expr AS DATE)函数行为变更
    • 升级前:DATE日期转换函数对输入的字符串检查不够严格,可以有非日期格式的字符作为输入参数。例如,执行如下查询语句:
      select cast(a as date) from values ('2020-1x-19') t(a);
      返回结果如下:
      +------------+
      | a          |
      +------------+
      | 2020-01-19 |
      +------------+
    • 升级后:DATE日期转换函数对输入的字符串进行严格检查,要求年、月、日3个字段都必须是数字,如果是字母或空格都会被认为是非法输入,返回NULL。例如,执行如下查询语句:
      select cast(a as date) from values ('2020-1x-19') t(a);
      返回结果如下:
      +------------+
      | a          |
      +------------+
      | NULL       |
      +------------+
  • TO_DATE函数行为变更
    • 升级前:TO_DATE函数对输入的字符串检查不够严格,可以有非日期格式的字符作为输入参数。例如,执行如下查询语句:
      select to_date(a) from values ('2020-1x-19') t(a);
      返回结果如下:
      +------------+
      | _c0        |
      +------------+
      | 2020-01-19 |
      +------------+
    • 升级后:TO_DATE函数对输入的字符串进行严格检查,要求年、月、日3个字段都必须是数字,如果是字母或空格都会被认为是非法输入,返回NULL。例如,执行如下查询语句:
      select to_date(a) from values ('2020-1x-19') t(a);
      返回结果如下:
      +------------+
      | _c0        |
      +------------+
      | NULL       |
      +------------+
  • CAST(expr AS TIMESTAMP)函数行为变更
    • 升级前:TIMESTAMP时间转换函数对输入的字符串检查不够严格,可以有非日期格式的字符作为输入参数。例如,执行如下查询语句:
      select cast(a as timestamp) from values ('2020-11-19 16:3x:00.001') t(a);
      返回结果如下:
      +------------+
      | a          |
      +------------+
      | 2020-11-19 16:03:00.1 |
      +------------+
    • 升级后:TIMESTAMP时间转换函数对输入的字符串进行严格检查,要求年、月、日3个字段都必须是数字,如果是字母或空格都会被认为是非法输入,返回NULL。例如,执行如下查询语句:
      select cast(a as timestamp) from values ('2020-11-19 16:3x:00.001') t(a);
      返回结果如下:
      +------------+
      | a          |
      +------------+
      | NULL       |
      +------------+

2020年10月13日-SQL兼容性升级

SQL兼容性升级时间预计如下,如有变更,请以实际通知时间为准。
批次站点升级时间
第一批印度(孟买)、印度尼西亚(雅加达) 、英国(伦敦)10月13日
第二批美国(弗吉尼亚)、阿联酋(迪拜)、华北2政务云(北京)、华东2金融云(上海)10月15日
第三批日本(东京)、澳大利亚(悉尼)、美国(硅谷)、马来西亚(吉隆坡)10月20日
第四批新加坡、中国(香港)、德国(法兰克福)10月22日
MaxCompute SQL中的URL_DECODECONV函数升级,详细变更如下:
  • URL_DECODE函数
    • 升级前:如果URL_DECODE函数存在两个参数,第二个编码参数不生效,系统按照UTF-8编码格式解码,即URL_DECODE(url, "gbk")等于URL_DECODE(url)
    • 升级后:如果URL_DECODE函数存在两个参数,系统首先按照百分号(%)解码,然后按照第二个编码参数的编码格式解码,返回结果字符串。在DataWorks数据开发环境运行命令的示例如下。
      SELECT URL_DECODE("%CD%F5", "gbk");
      -- 升级前返回乱码。填写的编码参数GBK不生效,使用UTF-8编码格式解码。
      -- 升级后返回“王”。\xCD\xF5是“王”的GBK编码。
      
      SELECT URL_DECODE("%E7%8E%8B", "gbk");
      -- 升级前返回“王”。%E7%8E%8B是“王”的UTF-8编码。填写的编码参数GBK不生效,仍然使用UTF-8编码格式解码。
      -- 升级后返回NULL。\xE7\x8E\x8B不是合法的GBK编码。
      
      SELECT URL_DECODE("%E7%8E%8B");
      -- 升级前后都返回“王”。%E7%8E%8B是“王”的UTF-8编码。不填写编码参数,默认使用UTF-8编码格式解码。
      说明 在Windows环境下通过MaxCompute客户端(odpscmd)执行命令时,由于Windows环境存在cmd编码转换问题,可能会将GBK编码再次转换为其他编码。
  • CONV函数
    • 如果项目空间为Hive兼容模式版本,对于非法输入参数,升级前后都返回0。
    • 如果项目空间为1.0或2.0数据类型版本:
      • 升级前:如果查询的表字段为非法参数,返回结果为乱码。
      • 升级后:如果查询的表字段为非法参数,返回结果为NULL。

        例如,CONV("00e04c9d034a", 2, 10)返回结果为NULL。

2020年7月24日-MaxCompute新增聚合函数

MaxCompute新增聚合函数APPROX_DISTINCT(value)ANY_VALUE(value)ARG_MAX(valueToMaximize, valueToReturn)ARG_MIN(valueToMinimize, valueToReturn)。函数功能如下:
  • APPROX_DISTINCT(value):返回输入的非重复值的近似数目。
  • ANY_VALUE(value):返回取值范围内的任意一个值。
  • ARG_MAX(valueToMaximize, valueToReturn):返回valueToMaximize最大值对应行的valueToReturn
  • ARG_MIN(valueToMinimize, valueToReturn):返回valueToMinimize最小值对应行的valueToReturn
新增聚合函数详情请参见聚合函数

2020年7月29日-新增项目的默认数据类型版本从1.0变更为2.0

MaxCompute通过DataWorks控制台新增项目时,项目的默认数据类型版本从1.0变更为2.0。该变更将于2020年7月29日到2020年8月6日陆续对国际站各个区域进行升级。如果您之前创建过存量项目,新建项目时需要选择合适的数据类型版本。不同数据类型版本的项目进行数据交互时可能会引起兼容性问题。

MaxCompute有3个数据类型版本,不同数据类型版本在定义和行为上有一定的差异。MaxCompute将数据类型相关属性组成3个组合,分别对应1.0数据类型版本、2.0数据类型版本和Hive兼容数据类型版本。详情请参见数据类型版本说明
说明 此功能对存量项目的数据类型版本无影响。如果存量项目需要更新数据类型版本,请参见修改项目的数据类型版本

2020年6月29日-新增项目支持选择数据类型版本功能上线

MaxCompute新增项目初始化数据类型版本的功能将于2020年6月29日到2020年7月15日陆续对国际站各个区域进行升级。升级完成后,您在创建新项目时,将需要选择初始化数据类型版本。

MaxCompute有3个数据类型版本,不同数据类型版本在定义和行为上有一定的差异。MaxCompute将数据类型相关属性组成3个组合,分别对应1.0数据类型版本、2.0数据类型版本和Hive兼容数据类型版本。详情请参见数据类型版本说明
说明 此功能对存量项目的数据类型版本无影响。如果存量项目需要更新数据类型版本,请参见修改项目的数据类型版本

2020年3月15日-MaxCompute存储降价

MaxCompute于2020年3月15日开始,对现有的存储费用(按量计费)进行降价,降价原则:
  • 将原来的5个阶梯价调成3个阶梯价,减少存储计费复杂度。
  • 将新阶梯单价调低,最终达到降价目的。
2020年3月15日前,原存储阶梯价如下。
存储量 阶梯单价 固定价
大于0 GB小于等于1 GB 不涉及 0.00 USD/天
大于1 GB小于等于100 GB 0.0028 USD/GB/天 不涉及
大于100 GB小于等于1 TB 0.0014 USD/GB/天 不涉及
大于1 TB小于等于10 TB 0.0013 USD/GB/天 不涉及
大于10 TB小于等于100 TB 0.0011 USD/GB/天 不涉及
大于100 TB 0.0009 USD/GB/天 不涉及
2020年3月15日起,新存储阶梯价如下。
存储量 阶梯单价 固定价
大于0 GB小于等于1 GB 不涉及 0.00 USD/天
大于1 GB小于等于10 TB 0.0011 USD/GB/天 不涉及
大于10TB小于等于100 TB 0.0009 USD/GB/天 不涉及
大于100 TB 0.0006 USD/GB/天 不涉及
存储计费统计方式不变,更多信息请参见存储费用(按量计费)
  • 存储到MaxCompute的数据,包括表(Table)和资源(Resource)等,会按照其数据容量的大小进行阶梯计费,计费周期为天。
  • 以小时级别采集您每个项目空间下当前的存储使用情况,并以项目空间为基本单位,计算您当天的存储平均值再乘以单价。由于MaxCompute以项目空间为基本单位计算您当天的存储平均值。因此数据越集中存放在某个项目空间中,存储费用会越低。
假设您的某个项目的每天存储平均值为1 PB,原阶梯单价每天收取的费用如下。
(100-1)GB*0.0028 USD/GB/天 
+(1024-100)GB*0.0014 USD/GB/天 
+(10240-1024)GB*0.0013 USD/GB/天 
+(102400-10240)GB*0.0011 USD/GB/天 
+(10240*10240-102400)GB*0.0009 USD/GB/天
=966.486 USD/天
新阶梯单价每天收取费用如下:
(10240-1)GB*0.0011 USD/GB/天
+(102400-10240)GB*0.0009 USD/GB/天 
+(10240*10240-102400)GB*0.0006 USD/GB/天
=661.9125 USD/天

2020年2月24日-SQL兼容性升级

SQL兼容性升级时间预计如下,如有变更,请以实际通知时间为准。
批次站点升级时间
第一批印度尼西亚(雅加达) 、英国(伦敦)、印度(孟买)2月24日
第二批中东东部 1(迪拜)、美国东部 1(弗吉尼亚)、华北2政务云(北京)、中国(香港)2月26日
第三批马来西亚(吉隆坡)、日本(东京)、德国(法兰克福)3月2日
第四批美国西部1(硅谷)、亚太东南1(新加坡)、亚太东南2(悉尼)3月4日
  • GET_IDCARD_AGE函数行为变更:
    • Get_Idcard_Age函数规则中”如果当前年份减去出生年份差值大于100则返回NULL“,升级为“返回年份减去出生年份差值”,即不存在大于100则返回NULL的情况。例如,get_idcard_age('110101190001011009')结果返回NULL,升级后结果为120。
    • 如果您希望升级后,该函数返回结果保留现状,则需要找出对应的查询,评估后进行改造。可以通过get_idcard_age结果加IF函数或者CASE WHEN表达式来解决。
      原始查询修改后查询
      GET_IDCARD_AGE(idcardno)if(GET_IDCARD_AGE(idcardno) > 100, NULL, GET_IDCARD_AGE(idcardno))
      GET_IDCARD_AGE(idcardno)CASE WHEN GET_IDCARD_AGE(idcardno) > 100 THEN NULL ELSE GET_IDCARD_AGE(idcardno) END
  • CONCAT_WS函数行为变更:
    • 升级前,在查询运行时CONCAT_WS函数没有打开Hive兼容并且有3个及以上参数,其中有一个参数是ARRAY类型时,参数中的array item不会出现在最终的结果中。例如,concat_ws(',', array('a'), array('b', 'c')),期望结果为"a,b,c",但是当前结果为",,,"
    • 升级后,无需打开Hive兼容,CONCAT_WS的参数支持STRING类型和ARRAY类型混合。concat_ws(',', array('a'), array('b', 'c'))的结果为"a,b,c"
  • Like%%查询输入为空时返回值变更。
    Like字符匹配函数,当它的输入是空字符串,而Pattern是%%时,当前返回为False;升级后,则返回True。
    --创建表,向表中插入空字符串。
    create table if not exists table_test (a string) lifecycle 3;
    insert into table table_test values ('');
    
    select a like '%%' from table_test;
    
    --当前返回如下。
    +------+
    | _c0  |
    +------+
    | false |
    +------+
    
    --升级后返回如下。
    +------+
    | _c0  |
    +------+
    | true |
    +------+

2019年12月25日-开源地理空间UDF

MaxCompute支持兼容ESRI专门为Apache Hive实现的开源地理空间UDF,您可以将此开源地理空间UDF注册到MaxCompute中,以兼容开源Hive UDF的方式实现地理空间函数使用,详情请参见UDF(地理空间)

2019年10月11日-MaxCompute SQL新功能

  • JOIN与SETOP支持括号指定优先级
    SELECT * FROM src JOIN (src2 JOIN src3 on xxx) ON yyy; 
    SELECT * FROM src UNION ALL (SELECT * FROM src2 UNION ALL SELECT * FROM src3);

    详细内容请参见JOIN交集(INTERSECT)、并集(UNION)和补集(EXCEPT)

  • 支持odps.sql.orderby.position.alias以及odps.sql.groupby.position.alias
    当打开这两个Flag的时候,对应ORDER BY和GROUP BY中的整型常量被当做SELECT的列序号处理。
    表src的列为key和value
    SELECT * FROM src ORDER BY 1;
    --等同于
    SELECT * FROM src ORDER BY key;

    详细内容请参见SELECT语法

  • 新增内置函数
    • 新增内置函数STRING JSON_TUPLE(STRING json,STRING key1,STRING key2,…):传入一组key和一个JSON字符串,返回一个元组。JSON_TUPLE() 支持包含中文的JSON数据解析,支持多层嵌套以及包含多重嵌套的数组的JSON数据解析。在需要对同一个JSON字符串多次解析的情况下,相比于多次调用get_json_objectjson_tuple可以一次输入多个key,且JSON字符串只被解析一次,效率更高。 详情请参见字符串函数
    • 新增内置函数INT EXTRACT(datepart from timestamp):提取日期的一部分,datepart支持YEAR、MONTH、DAY等时间描述,timestamp 为Timestamp类型数据。 详细请参见日期函数
  • 支持指定表的列默认值
    DEFAULT VALUE允许您创建TABLE的时候指定默认值,INSERT的时候如果不指定该列,则插入默认值,举例如下。
    CREATE TABLE t (a bigint default 10, b bigint);
    INSERT INTO TABLE t(b) SELECT 100; 
    --等同于
    INSERT INTO TABLE t(a, b) SELECT 10, 100;
  • 支持自然连接
    自然连接(Natural Join)即参与JOIN的两张表根据字段名字自动决定连接字段。支持outer natural join,支持使用using字段执行JOIN,输出字段中公共字段只出现一次,举例如下。
    --表src的列(key1, key2, a1, a2),表src2的列(key1, key2, b1, b2)
    SELECT * FROM src NATURAL JOIN src2;
    --由于 src 和 src2 有两个同名字段 (key1, key2) ,所以上面的JOIN相当于:
    SELECT src.key1 as key1, src.key2 as key2, src.a1, src.a2, src2.b1, src2.b2 FROM src INNER JOIN src2 ON src.key1 = src2.key1 AND src.key2 = src2.key2;
    详细请参见JOIN
  • 支持LIMIT OFFSET
    OFFSET语句和ORDER BY LIMIT语句配合,可以指定跳过OFFSET数目的行。如下面的语句将src按照key从小到大排序后,输出第11到第20行 (OFFSET 10指定跳过前10行,LIMIT 10指定最多输出10行)。
    SELECT * FROM src ORDER BY key LIMIT 10 OFFSET 10;

    详细请参见SELECT语法

  • 其他内置语法结构
    • 支持IS DISTINCT FROM语法结构: a is distinct from b 相当于 not(a <=> b) a is not distinct from b 相当于 a <=> b
    • 支持字符串连接操作符(||): a || b || c 相当于 concat(a, b, c)

    详细请参见运算符

  • 分区合并

    MaxCompute有分区数量上限6万的限制,当分区数量过多时,可使用合并分区功能,对数仓数据进行归档,降低分区数量。合并分区功能会将同一个表下多个分区数据快速合并成一个分区,并删除之前分区,把数据移动到指定的分区下。语法格式如下,详细内容请参见分区和列操作

    ALTER TABLE <tableName> MERGE [IF EXISTS] PARTITION(<predicate>) [, PARTITION(<predicate2>) ...] OVERWRITE PARTITION(<fullPartitionSpec>) ;
  • Add/Drop Partitions
    支持一次性增加或者删除多个分区,语法格式如下。
    ALTER TABLE t ADD [IF NOT EXISTS] PARTITION (p = '1') PARTITION (p = '2');
    ALTER TABLE t DROP [IF EXISTS]  PARTITION (p = '1'), PARTITION (p = '2');
    --注意ADD多个分区之间没有逗号,DROP的多个分区间有逗号。

2019年8月29日-外表自定义storagehandler实现Outputer接口升级

北京时间2019年8月29日,MaxCompute进行版本升级。期间,您在使用外表自定义storagehandler实现Outputer接口时,如果通过列名而非数字下标获取列数据,可能会引起作业失败。

升级时间:北京时间,2019年8月29日14:00~23:00

升级Region:美国西部1(硅谷)、亚太东南1(新加坡)

2019年8月21日-外表自定义storagehandler实现Outputer接口升级

北京时间2019年8月21日,MaxCompute进行版本升级。期间,您在使用外表自定义storagehandler实现Outputer接口时,如果通过列名而非数字下标获取列数据,可能会引起作业失败。

升级时间:北京时间,2019年8月21日14:00~23:00

升级Region:亚太东北1(东京)、欧洲中部1(法兰克福)、中国(香港)、亚太东南2(悉尼)

影响原因:Outputer.output(Record record)中,传入的record为Outputer的上一个Operator产生的记录,列名可能发生变化,系统无法保证固定列名。

例如,表达式some_function(column_a)产生的列名是一个临时列名。因此,使用record.get(列名)方式来获取列内容的用法都有可能受到影响,建议使用record.get(index)方式获取。Outputer里如需获取表的列名,请调用 DataAttributes.getFullTableColumns()

2019年7月24日-MaxCompute Spark开放

开放Region:华东1、华北2、华南1、美西1、中国(香港)、德国、新加坡、印度。

2019年3月26日-SQL语言功能升级

  • 支持Grouping Set多维聚合分析(Cube,Roll up),适配需要对a列做聚合,也要对b列做聚合,或者同时要按照a、b两列做聚合的场景。具体的使用方法请参见GROUPING SETS
  • 支持INTERSECT/MINUS/EXCEPT,具体使用方法请参见交集(INTERSECT)、并集(UNION)和补集(EXCEPT)
  • 通过外表读取OSS上的ORC和Parquet格式的文件时,支持对文件的列裁剪,有效减少IO量,节省计算资源和成本。
  • Java UDX类型系统增强:UDF支持Writable参数,具体使用方法请参见Java UDF
SQL性能优化
  • DynamicDAG:动态优化的必要机制,它可以将一个优化(可能是资源配置或算法选择)延迟到运行时,以便提高优化的精准度,降低产生较差计划的可能性。
  • ShuffleRemove Optimization:针对Shuffle的优化。 从本次版本升级开始,MaxCompute将支持对inner join时右表key相同的场景进行Shuffle Remove优化。

2019年3月1日-MaxCompute 外部表开始收费

从2019年3月1日开始,MaxCompute SQL外部表(处理OSS/Table Store数据)功能开始计费。

计费标准为:
一次SQL计算费用=计算输入数据量*SQL价格
SQL价格为0.0044 USD/GB。当天的所有计量信息在第二天做一次性汇总收费,并直接体现在您的账户账单中。详情请参见计费项与计费方式概述

2019年1月15日16:00~20:00-中国(香港)Region底层优化

为向您提供更好的产品性能和稳定性,MaxCompute将于北京时间2019年1月15日16:00~20:00对中国(香港)Region底层元数据仓库组件进行优化。在优化期间,中国(香港)Region用户的应用可能出现1分钟左右任务无法提交、运行中任务失败的情况。极端情况下,应用不可用时间将延长至30分钟。请您尽量避免在迁移窗口提交作业。其他Region不受影响。如果您有任何问题,可随时通过企业钉钉群反馈。

2018年12月24日-MaxCompute支持时区配置

MaxCompute Project时区默认是中国的东八区,在用到DATETIME、TIMESTAMP或DATE类型相关的字段以及相关时间内置函数都是按东八区进行计算,2018年12月24日MaxCompute开始支持时区配置,有以下两种方式:

  • Session级别: set odps.sql.timezone=<timezoneid>;,该语句需要与计算语句一起提交。
    set odps.sql.timezone=Asia/Tokyo;
    select getdate();
    --结果如下。
    output:
    +------------+
    | _c0        |
    +------------+
    | 2018-10-30 23:49:50 |
    +------------+
  • Project级别: setProject odps.sql.timezone=<timezoneid>;,该语句需要Project Owner执行。执行此命令后该Project下相关的时间计算就会取设置后的时区,因此对于原有的任务数据会有影响,所以该操作需谨慎。建议仅对新增Project进行设置,对已有数据的Project不设置。
使用限制及注意事项:
  • 时区配置支持范围为:SQL内置日期函数、UDF、UDT、UDJ、select transform都支持获取Project Timezone属性来支持时区。
  • 时区支持的格式为Asia/Shanghai(存在夏令时跳变),不支持GMT+9格式。
  • 当SDK时区与Project时区不同时,DATETIME类型转化为STRING类型操作需设置GMT时区。
  • 时区配置后,通过DataWorks执行相关SQL时,日期显示某些时间段会有时间差异。例如,1900~1928年的日期时间差异5分52秒,1900年之前的日期时间差异9秒。
  • 为了保证MaxCompute在多个时区DATETIME类型数据的正确性,MaxCompute服务、Java SDK以及配套的客户端将在近期进行版本更新(-oversea后缀的Java SDK、客户端版本),更新后可能影响MaxCompute中已经存储的早于1928年的DATETIME类型数据的显示。
  • 建议(非中国东八区的Region)同步更新Java SDK、客户端版本,以便保证SQL计算结果及Tunnel传输数据在1900-01-01之后范围的准确性和一致性。而对于早于1900-01-01的DATETIME数据,SQL的计算显示结果和Tunnel传输数据仍旧可能存在343秒的差异。对于新版本SDK、客户端之前已经上传的早于1928-01-01的DateTime数据,在新版本中会减少352秒。
  • 如果继续沿用不带有-oversea后缀的SDK、客户端,将存在SQL计算结果和Tunnel传输数据存在差异的风险。例如,早于1900-01-01的数据差异为9秒,1900-01-01~1928-01-01的数据差异为352秒。
    说明 Java SDK、客户端版本更新配置时区不影响DataWorks的时区配置,因此时区会存在差异,需要您对DataWorks中定时任务调度的影响进行计算评估。在日本Region,DataWorks服务器是GMT+9时区,在新加坡Region,DataWorks服务器是GMT+8时区。
  • 通过JDBC连接的第三方客户端需要在客户端设置时区,保证与服务端时区设置一致性。
  • MapReduce支持时区功能。
  • Spark支持时区功能。
    • 对于提交到MaxCompute计算集群的任务形式,可以自动获取Project时区。
    • 通过yarn-client模式启动(例如spark-shell,spark-sql,pyspark等)的设置,需要您手动配置Driver的启动参数(spark-defaults.conf),增加spark.driver.extraJavaOptions -Duser.timezone=America/Los_Angeles ,Timezone是要使用的时区。
  • PAI支持时区功能。
  • Graph支持时区功能。