本文为您介绍MaxCompute产品功能的发布信息。
2025年02月
2025年02月正式发布MaxCompute SQL V50版本,新增功能如下:
数仓引擎
数据格式
Decimal数据类型支持更高精度的scale:Decimal小数部分的位数scale,取值范围从[0, 18]扩大至[0, 38],需要通过Flag参数
SET odps.sql.decimal2.extended.scale.enable=true;
进行设置。详情请参见2.0数据类型版本。语言/函数增强
STRUCT语法功能增强:支持STRUCT Expression语法,使用Named Expression命名表达式构造STRUCT类型数据,提供构造复杂类型STRUCT数据的一种新方法。
FIND_IN_SET函数功能增强:支持在以分隔符分隔的字符串中查找指定的字符串,并返回其位置。相比原先仅支持逗号(,)分隔符,现支持用户自定义STRING类型的分隔符,实现更灵活的字符串位置查找。详情请参见FIND_IN_SET。
新增内置函数GET_DATA_FROM_OSS:支持使用函数下载Object Table表中的OSS对象文件数据,返回BINARY二进制数据以供后续计算。
功能增强
支持MATERIALIZED CTE功能:定义CTE时,可在SELECT语句中使用MATERIALIZE HINT将CTE的计算结果缓存至一张临时表中。后续访问该CTE时,可直接从缓存中读取结果,从而避免了多层CTE嵌套场景下的内存超限问题,同时提升了CTE语句的性能。
Bloomfilter index可观测性增强:支持在Logview中的SubStatusHistory查看Bloomfilter index聚合花费时间。详情请参见生成Bloomfilter index。
物化视图功能增强:完善查询改写能力,支持更多算子,包括DISTRIBUTED BY、ORDER BY、ORDER BY+LIMIT、LIMIT。
性能/参数升级
对于ARRAY_CONTAINS函数,在字符串查找场景下,优化器将自动识别输入参数进行SPLIT的场景,并默认将其优化为等价的FIND_IN_SET操作,同时适配了更多的分隔符场景。例如:
ARRAY_CONTAINS(SPLIT(c1, '_'), c2)
被自动优化为FIND_IN_SET(c1, c2, '_')
,提升了ARRAY_CONTAINS的执行性能。默认开启动态分区Reshuffle Split能力,实现动态分区Reshuffle场景优化。通过对动态分区数据分路,仅对单路进行Reshuffle写入,从而减少动态分区Reshuffle开销,同时避免小文件过多的问题。
进一步增强Shuffle Removal能力,在MAPJOIN和PARTITIONED HASH JOIN场景下消除不必要的Shuffle,提升作业性能。
近实时数仓
Delta Table增量表格式CDC特性发布
Delta Table CDC(Change Data Capture)定义了识别并捕获数据库表中数据的变更场景,用于记录Delta Table增量表行级别的插入、更新和删除等操作,从而有效捕捉该表的数据变化事件。Delta Table CDC支持在建立时自动生成定时调度任务,调度任务会执行异步任务生成CDC。相关语法包括CREATE、ALTER、DROP等,用户可以基于CDC事件驱动,辅助实现增量计算、数据同步以及数仓分层等业务需求。详情请参见CDC(邀测)。
Stream数据流对象新特性发布
Stream是MaxCompute自动管理Delta Table增量查询数据版本的流对象,记录对增量表所进行的数据操作语言(DML)更改,包括插入、更新和删除操作,并附带每次更改的元数据,以便于您基于更改后的数据采取相应的操作。详情请参见流对象(Stream)。
周期性调度任务特性发布
MaxCompute周期调度任务(Periodic Task)可以灵活自定义任务调度策略,执行对应的SQL计算逻辑,自动构建数据管道,简化ETL链路。用户可将任务与表数据变更以及流读场景相结合,从而实现连续的ETL工作流程,以处理最近更改的数据。详情请参见周期调度任务(邀测)。
Flink数据写入Delta Table生态支持
MaxCompute Delta Table支持多种数据写入方式,MaxCompute提供了新版的Flink Connector插件,支持将Flink数据写入至MaxCompute的普通表和Delta Table类型表,提高了Flink数据写入MaxCompute的便捷性。另外,支持Flink CDC直接写入Delta Table。详情请参见使用Flink写入数据到Delta Table。
湖仓一体和外部表能力
创建外部表解析PARQUET格式数据文件时,支持部分数据类型的隐式转换,如TINYINT、SMALLINT、DATETIME等类型。
外部表支持使用MAX_PT函数查询最新分区,可使用MAX_PT函数查询OSS外部表的最新的有数据的分区。详情请参见MAX_PT。
2024年11月
2024年11月正式发布MaxCompute SQL V49版本,新增功能如下:
数仓引擎
新功能
支持Bitmap index(位图索引):在基数较大(存在大量相同值)的列上建立索引,范围过滤场景下最多可过滤掉超过50%以上的数据,从而起到查询加速的效果。详情请参见Bitmap Index(Beta)。
支持Bloomfilter index:布隆过滤器(Bloomfilter)是一种高效的概率型数据结构,MaxCompute支持使用Bloomfilter index处理大规模数据点查场景,减少查询过程中不必要的数据扫描,从而提高整体的查询效率和性能。详情请参见Bloomfilter index(Beta)。
内置函数
新增内置函数JSON_EXPLODE:支持将JSON数组或JSON对象中的每个元素拆解(展开)成多行记录。详情请参见JSON_EXPLODE。
语言增强
CREATE TABLE支持使用OR REPLACE更新表信息:如果目标表已存在,可以直接更新Meta信息。不需要先删除表后再创建,简化用户SQL语句的使用,提升易用性。详情请参见创建和删除表。
支持一次性注释SQL中的单行或多行内容,增强代码的可读性。详情请参见SQL注释。
支持SUBQUERY_MAPJOIN HINT:部分子查询(如SCALAR/IN/EXISTS)会在执行过程中被转换成JOIN进行计算,支持用户在SUBQUERY中通过显式指定Hint来使用MAPJOIN算法提升执行效率。详情请参见SUBQUERY_MAPJOIN HINT。
新增参数
行为变更
默认对所有DML操作开启动态分区转静态分区优化功能,以提升查询性能。该优化对于UPDATE/DELETE/MERGE INTO操作有行为变更影响。详情请参见动态分区转静态分区优化公告。
大数据AI(MaxFrame)
Logview 2.0适配MaxFrame,支持以下MaxFrame的相关功能,详情请参见通过Logview 2.0查看MaxFrame作业:
查看MaxFrame Session中提交的所有DAG的执行记录、运行耗时等信息。
交互式查看每个DAG中的SubDAG的执行顺序、运行时间、算子拓扑和状态关系。
支持查看每个子实例的设置、运行状态、内存和CPU等资源使用情况。
MaxFrame支持自动化打包服务:简化了Python开发中第三方包的管理操作。该服务支持在作业开发时声明所需的外部依赖包,在作业运行时,这些包会自动被打包并集成到作业环境中,无需手动上传,从而减少繁琐的打包管理工作。详情请参见自动化打包服务。
湖仓一体和外部表能力
JNI写入Parquet外部表时支持ZSTD压缩
相比原先Parquet外部表写入仅支持Uncompressed和Snappy压缩格式的文件 ,现新增对ZSTD压缩格式的支持,即创建Parquet外部表时支持写入ZSTD压缩格式的文件,以提升压缩率及读写性能,实现降本增效。详情请参见创建OSS外部表。
CsvStorageHandler/OpenCsvSerde数据读写补充数据类型支持
MaxCompute具备与Hive兼容的OpenCSV读写标准(以下简称CsvSerde),其数据类型为Hive兼容数据类型。此外,MaxCompute还提供了自定义的CsvStorageHandler读写标准(以下简称CsvHandler),其数据类型为ODPS2.0数据类型。尽管数据类型并不完全相同,但仍存在多种基本类型字段的交集,例如INT和FLOAT等。然而,二者在对这些数据类型的解析行为上仍存在诸多差异,并且尚未形成统一标准。例如对于FLOAT类型,CsvSerde规定了对INF等特殊值的处理,而CsvHandler则没有处理特殊值,仅尝试使用parseFloat方法进行解析,这导致用户在混合使用CsvHandler和CsvSerde时,会遇到基本数据类型解析行为不一致的问题。
此外,CsvStorageHandler支持BOOLEAN、TIMESTAMP、DATE、DATETIME等多种基本数据类型,便于将所有数据类型从MaxCompute导出至OSS,并以CSV格式存储。通过OSS进行跨区域复制后,数据可恢复至MaxCompute。
OSS外部表支持使用RAMRole身份进行STS鉴权
为了支持客户通过RAMRole身份(免AK)访问MaxCompute,或者通过云上其他产品使用RAM Role身份访问MaxCompute时,在外部表场景下能够顺利进行,现已优化了功能。原先由于外部表中包含MaxCompute访问对端产品的表属性集成的RAMRole,在角色扮演过程中无法获取到访问者的RAMRole身份中的用户信息,导致不支持直接以RAMRole身份访问这些外部表。现在,即便是在涉及外部表的情况下,也能确保RAMRole身份的有效利用与无缝访问。详情请参见创建OSS外部表。
Optimizer支持在Query执行中临时统计表的Stats,从而发现小表,优化查询计划
由于外部表查询的数据位于外部数据湖,为了确保数据的开放性,系统不在本地建立元数据。同时由于缺乏预先统计信息,查询优化器采用保守策略,导致查询效率低。现支持Optimizer在Query执行中临时统计表的Stats(统计信息)以发现小表,从而可以主动使用HashJoin、优化Join Order、减少大量Shuffle或缩短执行的Pipeline等方法,最终优化查询计划。详情请参见读取OSS数据。