引擎版本发布记录

本文为您介绍MaxCompute产品功能的发布信息。

202502

202502月正式发布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 HINTCTE的计算结果缓存至一张临时表中。后续访问该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能力,在MAPJOINPARTITIONED HASH JOIN场景下消除不必要的Shuffle,提升作业性能。

近实时数仓

  • Delta Table增量表格式CDC特性发布

    Delta Table CDC(Change Data Capture)定义了识别并捕获数据库表中数据的变更场景,用于记录Delta Table增量表行级别的插入、更新和删除等操作,从而有效捕捉该表的数据变化事件。Delta Table CDC支持在建立时自动生成定时调度任务,调度任务会执行异步任务生成CDC。相关语法包括CREATE、ALTER、DROP等,用户可以基于CDC事件驱动,辅助实现增量计算、数据同步以及数仓分层等业务需求。详情请参见CDC(邀测)

  • Stream数据流对象新特性发布

    StreamMaxCompute自动管理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

202411

202411月正式发布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

  • 新增参数

    • 原有的odps.stage.mapper.split.size参数仅支持在Mapper阶段进行整体设置,新增Flag支持灵活地指定表按行或按并行度进行切分。尤其是在表中每行数据的size较小,而后续计算负担较重的情况下,可以提高任务的并行度。详情请参见Flag参数列表

    • 当一个查询重复使用相同的分区表时,您可以设置set odps.optimizer.merge.partitioned.table=true;参数,系统会对分区表进行合并,以最大限度地减少对分区表的IO操作,提升性能。详情请参见Flag参数列表

  • 行为变更

    • 默认对所有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外部表写入仅支持UncompressedSnappy压缩格式的文件 ,现新增对ZSTD压缩格式的支持,即创建Parquet外部表时支持写入ZSTD压缩格式的文件,以提升压缩率及读写性能,实现降本增效。详情请参见创建OSS外部表

  • CsvStorageHandler/OpenCsvSerde数据读写补充数据类型支持

    • MaxCompute具备与Hive兼容的OpenCSV读写标准(以下简称CsvSerde),其数据类型为Hive兼容数据类型。此外,MaxCompute还提供了自定义的CsvStorageHandler读写标准(以下简称CsvHandler),其数据类型为ODPS2.0数据类型。尽管数据类型并不完全相同,但仍存在多种基本类型字段的交集,例如INTFLOAT等。然而,二者在对这些数据类型的解析行为上仍存在诸多差异,并且尚未形成统一标准。例如对于FLOAT类型,CsvSerde规定了对INF等特殊值的处理,而CsvHandler则没有处理特殊值,仅尝试使用parseFloat方法进行解析,这导致用户在混合使用CsvHandlerCsvSerde时,会遇到基本数据类型解析行为不一致的问题。

    • 此外,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,从而发现小表,优化查询计划

    由于外部表查询的数据位于外部数据湖,为了确保数据的开放性,系统不在本地建立元数据。同时由于缺乏预先统计信息,查询优化器采用保守策略,导致查询效率低。现支持OptimizerQuery执行中临时统计表的Stats(统计信息)以发现小表,从而可以主动使用HashJoin、优化Join Order、减少大量Shuffle或缩短执行的Pipeline等方法,最终优化查询计划。详情请参见读取OSS数据