- 支持序列化:
- 主要数据类型如
ArrayRecord
、Column
、TableSchema
和TypeInfo
现在支持序列化和反序列化,能够进行缓存和进程间通信。
- 主要数据类型如
- 谓词下推:
- 新增
Attribute
类型的谓词,用于指定列名。
- 新增
- Tunnel 接口重构:
- 重构了 Tunnel 相关接口,加入了无感知的重试逻辑,大大增强了稳定性和鲁棒性。
- 删除了
TunnelRetryStrategy
和ConfigurationImpl
类,分别被TunnelRetryHandler
和Configuration
所取代。
- SQLExecutor 优化:
- 在使用
SQLExecutor
接口执行离线 SQL 作业时进行优化,减少每个作业获取结果时的一次网络请求,从而减少端到端延时。
- 在使用
- Table.read Decimal 读取:
- 修复了
Table.read
接口在读取decimal
类型时,后面补零不符合预期的问题。
- 修复了
Table
接口新增getPartitionSpecs
方法, 相比getPartitions
方法,该方法无需获取分区的详细信息,进而获得更快的执行速度
- 移除了
Column
类中的isPrimaryKey
方法。这个方法最初是为了支持用户在创建表时指定某些列为主键。然而,在读取场景下,这个方法容易引起误解,因为它并不会与服务端通信,所以当用户希望知道某列是否为主键时,这个方法并不适用。此外,在使用该方法建表时,主键应当是表级别的字段(因为主键是有序的),而该方法忽略了主键的顺序,设计上不合理。因此,在0.48.5版本中移除了该方法。 在读取场景,用户应当使用Table.getPrimaryKey()
方法来获取主键。 在建表场景,改为在TableCreator
中增加withPrimaryKeys
方法以达成建表时指定主键的目的。
修复了RecordConverter
在format String类型的Record
,当数据类型为byte[]
时,会抛出异常的问题
- 使用
table-api
写MaxCompute表,现在支持JSON
和TIMESTAMP_NTZ
类型 odps-sdk-udf
功能继续完善
- Table.read() 接口在遇到 Decimal 类型时,目前将默认去掉尾部的 0(但不会使用科学计数法)
- 修复了 ArrayRecord 针对 JSON 类型不支持 getBytes 方法的问题
- 在构建UpsertSession时,现在支持传入
retryStrategy
。
UpsertStream.Listener
的onFlushFail(String, int)
接口被标记为了@Deprecated
,使用onFlushFail(Throwable, int)
接口替代。该接口将在 0.50.0 版本中移除。- Tunnel upsert 的默认压缩算法更改为
ODPS_LZ4_FRAME
。
- 修复了 Tunnel upsert 当压缩算法不为
ZLIB
时,数据无法正确写入的问题。 - 修复了 UpsertSession 当用户未显式调用
close
时,资源长时间无法释放的问题。 - 修复了 Tunnel 获取数据相关接口(
preview
,download
),当遇到表内存在不合法Decimal
类型时(如inf
,nan
),会抛出异常的问题,现在会返回null
(与getResult
接口一致)。
- 修复了Tunnel upsert时,对DATE、DATETIME类型的主键进行分桶时,依赖用户本地时区的问题。这可能导致分桶有误,导致数据查询异常。强烈建议依赖该特性的用户升级到0.48.2版本。
Table
增加获取分层存储的lifecycle配置的方法getTableLifecycleConfig()
。TableReadSession
现支持谓词下推了
Arrow和ANTLR库:在 Maven Shade 插件配置中添加了新的包含项,以更好地处理和打包特定库。这些包含项确保某些关键库被正确地打包进最终的遮蔽( Shaded)构件中。新加入的库包括:
- org.apache.arrow:arrow-format:jar
- org.apache.arrow:arrow-memory-core:jar
- org.apache.arrow:arrow-memory-netty:jar
- org.antlr:ST4:jar
- org.antlr:antlr-runtime:jar
- org.antlr:antlr4:jar
- org.antlr:antlr4-runtime:jar
ANTLR和StringTemplate的遮蔽重定位:配置现在包括针对 org.antlr 和 org.stringtemplate.v4 包的更新重定位规则,以防止可能在类路径中存在的这些库的其他版本的潜在冲突。新的遮蔽模式是: org.stringtemplate.v4 重定位至 com.aliyun.odps.thirdparty.org.stringtemplate.v4 org.antlr 重定位至 com.aliyun.odps.thirdparty.antlr
- 引入了
odps-sdk-udf
模块,支持在UDF中按批读取MaxCompute数据,能在大数据量场景下显著提高性能。 Table
现支持获取ColumnMaskInfo
,用于数据脱敏场景,方便相关信息的获取。- 新增通过
odps.getRestClient().setProxy(Proxy)
方法设置代理的支持。 - 实现了可迭代的
RecordReader
以及RecordReader.stream()
方法,允许将其转换为Record
对象的流。 - 在
TableAPI RestOptions
中新增upsertConcurrentNum
和upsertNetworkNum
参数,为使用TableAPI进行upsert操作的用户提供更细致的控制。 - 支持使用
Builder
模式来构建TableSchema
。 ArrayRecord
支持toString
方法。
- 现在,当用户使用
StsAccount
但不传递StsToken
时,将被视作使用AliyunAccount
。
UploadSession
现支持配置GET_BLOCK_ID
参数,当客户端不需要blockId
时,可以加速创建Session的速度。- 使用
builder
模式(TableCreator
)加强了表的创建方法,现在可以更简单地创建表了。
- 修复了
Upsert Session
获取连接时,超时时间配置错误的问题。 - 修复了
TimestampWritable
在纳秒为负数时计算出错一秒的问题。
- 对 Stream 新类型的支持,可用于进行增量查询。
- 在
TableTunnel
中增加了preview
方法,用于数据预览。 - 引入
OdpsRecordConverter
,用于对 Record 进行解析和格式化。 Projects
类增加了create
(创建)和delete
(删除)方法,update
方法现已公开。group-api
包下的相关操作已被标记为弃用。Schemas
类增强,支持通过设置SchemaFilter
来过滤 schema,支持listSchema
以及获取 schema 的详细元信息。DownloadSession
新增参数disableModifiedCheck
,用于跳过修改检查。新增参数fetchBlockId
,用于跳过获取 block ID 列表。TableWriteSession
支持写入TIMESTAMP_NTZ
/JSON
类型,新增参数MaxFieldSize
。TABLE_API
新增predicate
相关类,用于后续支持谓词下推。
Table
类的read
方法实现现已更换为TableTunnel.preview
方法,会支持 MaxCompute 新类型,时间类型切换为 Java 8 无时区类型。- 默认的
MapWritable
实现从HashMap
改为LinkedHashMap
,以确保有序。 Column
类现支持使用建造者模式(Builder pattern)进行创建。
TableReadSession
新增参数maxBatchRawSize
和splitMaxFileNum
。UpsertSession
现支持:- 写入部分列。
- 设置 Netty 线程池的数量(默认更改为 1)。
- 设置最大并发量(默认值更改为 16)。
TableTunnel
支持设置quotaName
选项。