本文为您提供关于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相关的权限策略,详情请参见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计划的调度。
- Quota列表。
- 访问控制。
- 新增自定义项目管理类角色。
在新版控制台的
,支持自定义创建admin
类型的角色,目前admin
类型角色只能通过Policy方式授权。通过此类角色,您可自定义安全管理人员的权限范围,如只能进行某个项目IP白名单配置的管理角色、只能进行某个项目数据权限管理的角色等。
感谢您的配合!
2023年03月11日-大数据计算服务MaxCompute PyODPS行为调整
尊敬的大数据计算服务MaxCompute用户:
- 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任务小概率会出现ClassNotFound
、NoClassDefFoundError
等Java类加载异常,出现异常后重试任务即可。此次升级带来的不便,望您谅解。
2022年08月24日-SAMPLE函数升级
SAMPLE函数升级前, sample(10,1)
这类用法的返回结果符合预期,但是后面如果跟上具体Hash列,返回的结果条目数量有可能有误,如果数据分布在大整数范围内,如(10187140, 10189550, 1018910)
, 则返回结果均为True, 不符合预期。
--对于如下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的支持!
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、DELETE和MERGE 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会按照批处理方式执行
delete
、update
作业,每一条语句都会使用资源并产生费用,建议您使用批量方式删除或更新数据,请参见更新或删除数据(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行为
--构造数据。
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方式。
- 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保留字符转义,以免行为变更对存量作业造成影响。
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函数返回行为切换为保留原始字符串的行为。
2020年12月14日-MaxCompute部分日期函数的输入参数校验行为变更
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 | +------------+
- 升级前:DATE日期转换函数对输入的字符串检查不够严格,可以有非日期格式的字符作为输入参数。例如,执行如下查询语句:
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 | +------------+
- 升级前:TO_DATE函数对输入的字符串检查不够严格,可以有非日期格式的字符作为输入参数。例如,执行如下查询语句:
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 | +------------+
- 升级前:TIMESTAMP时间转换函数对输入的字符串检查不够严格,可以有非日期格式的字符作为输入参数。例如,执行如下查询语句:
2020年10月13日-SQL兼容性升级
批次 | 站点 | 升级时间 |
---|---|---|
第一批 | 印度(孟买)、印度尼西亚(雅加达) 、英国(伦敦) | 10月13日 |
第二批 | 美国(弗吉尼亚)、阿联酋(迪拜)、华北2政务云(北京)、华东2金融云(上海) | 10月15日 |
第三批 | 日本(东京)、澳大利亚(悉尼)、美国(硅谷)、马来西亚(吉隆坡) | 10月20日 |
第四批 | 新加坡、中国(香港)、德国(法兰克福) | 10月22日 |
URL_DECODE
和CONV
函数升级,详细变更如下: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新增聚合函数
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日陆续对国际站各个区域进行升级。如果您之前创建过存量项目,新建项目时需要选择合适的数据类型版本。不同数据类型版本的项目进行数据交互时可能会引起兼容性问题。
2020年6月29日-新增项目支持选择数据类型版本功能上线
MaxCompute新增项目初始化数据类型版本的功能将于2020年6月29日到2020年7月15日陆续对国际站各个区域进行升级。升级完成后,您在创建新项目时,将需要选择初始化数据类型版本。
2020年3月15日-MaxCompute存储降价
- 将原来的5个阶梯价调成3个阶梯价,减少存储计费复杂度。
- 将新阶梯单价调低,最终达到降价目的。
存储量 | 阶梯单价 | 固定价 |
---|---|---|
大于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/天 | 不涉及 |
存储量 | 阶梯单价 | 固定价 |
---|---|---|
大于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以项目空间为基本单位计算您当天的存储平均值。因此数据越集中存放在某个项目空间中,存储费用会越低。
(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兼容性升级
批次 | 站点 | 升级时间 |
---|---|---|
第一批 | 印度尼西亚(雅加达) 、英国(伦敦)、印度(孟买) | 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
- Get_Idcard_Age函数规则中”如果当前年份减去出生年份差值大于100则返回NULL“,升级为“返回年份减去出生年份差值”,即不存在大于100则返回NULL的情况。例如,
- 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"
。
- 升级前,在查询运行时CONCAT_WS函数没有打开Hive兼容并且有3个及以上参数,其中有一个参数是ARRAY类型时,参数中的
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);
- 支持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_object,json_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,输出字段中公共字段只出现一次,举例如下。
详细请参见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;
- 支持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)
。
详细请参见运算符。
- 支持IS DISTINCT FROM语法结构:
- 分区合并
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。
- 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支持时区功能。