Releases: aliyun/aliyun-odps-java-sdk
v0.52.2-public
BUMP 0.52.2-public
v0.52.1-public
BUMP 0.52.1-public
v0.52.0-public
Changelog
[0.52.0-public] - 2025-04-17
🎉 New Features
-
TableAPI
- Added
enhanceWriteCheck
parameter toTableWriteSessionBuilder
to strengthen write validation capabilities - Added
Append2 Table
preview feature inTableCreator
(🚧 Preview)
- Added
-
DownloadSession
- Introduced
enableMaxStorage
configuration to support downloading Delta Tables via StorageAPI (🚧 Preview)
- Introduced
-
MaxQA
- Implemented CSV data parsing to strongly-typed records (
Parse CSV To Record
) - After server readiness,
getResult
(non-Tunnel mode) will return typed data (previously all String types) (🚧 Preview)
- Implemented CSV data parsing to strongly-typed records (
-
SQL
- Added
SQLTaskOption
andCreateInstanceOption
configuration classes to simplify overloads ofSQLTask.run()
- Added support for submitting Merge Tasks using regular expressions
- Implemented Unique ID mechanism to ensure idempotent submission of jobs with the same ID
- Added
-
ObjectConverter
- Added support for
BINARY_FORMAT_QUOTED_PRINTABLE
format parsing
- Added support for
🛠️ Functionality Improvements
-
ArrowStreamRecordReader
Refactored class implementation to support converting any sourceArrowReader
toRecordReader
-
ArrayRecord
- Optimized type validation logic:
✅ Changed potentialClassCastException
inset
method toIllegalArgumentException
✅ Improved error message readability
✅ Prevented JVM implicit optimizations (e.g., truncated error messages to null)
- Optimized type validation logic:
更新日志
[0.52.0-public] - 2025-04-17
🎉 新增功能
-
TableAPI
TableWriteSessionBuilder
新增enhanceWriteCheck
参数,增强写入校验能力TableCreator
新增Append2 Table
预览功能(🚧 Preview)
-
DownloadSession
- 新增
enableMaxStorage
配置,支持通过 StorageAPI 下载 Delta Table(🚧 Preview)
- 新增
-
MaxQA
- 实现 CSV 数据解析到强类型记录功能(
Parse CSV To Record
) - 服务端 Ready 后,
getResult
(非 Tunnel 模式)将返回类型化数据(原全量 String 类型)(🚧 Preview)
- 实现 CSV 数据解析到强类型记录功能(
-
SQL
- 新增
SQLTaskOption
和CreateInstanceOption
配置类,简化SQLTask.run()
方法重载 - 支持通过正则表达式提交 Merge Task 作业
- 新增 UniqueId 机制,确保同 ID 作业幂等提交
- 新增
-
ObjectConverter
- 新增
BINARY_FORMAT_QUOTED_PRINTABLE
格式解析支持
- 新增
🛠️ 功能优化
-
ArrowStreamRecordReader
重构类实现,支持将任意来源的ArrowReader
转换为RecordReader
-
ArrayRecord
- 优化类型校验逻辑:
✅ 将set
方法可能抛出的ClassCastException
改为IllegalArgumentException
✅ 增强错误信息可读性
✅ 避免 JVM 对异常的隐式优化(如错误信息被截断为 null)
- 优化类型校验逻辑:
v0.51.11-public
Changelog
[0.51.11-public] - 2025-03-18
Key Changes
- MCQA 2.0 Structural Improvement: The
ResultDescriptor
subclass inInstance
class has been upgraded fromMap<String, String>
to a dedicated POJO object, specifically optimized for MCQA 2.0 scenarios - Backward Compatibility: Fully compatible with legacy logic - existing code will continue to function without modification
更新日志
[0.51.11-public] - 2025-03-18
主要改动
- 结构优化:
Instance
类中ResultDescriptor
子类由Map<String, String>
升级为独立的 POJO 对象,专门适配 MCQA 2.0 场景 - 兼容保障:完全兼容旧版逻辑,现有代码无需修改即可正常运行
v0.51.10-public
Changelog
[0.51.10-public] - 2025-03-11
Features
-
TableTunnel Metrics Support
Upload/Download methods now support metrics collection.
Documentation Reference -
TunnelBufferedReader Implementation(Alpha)
AddedTunnelBufferedReader
for downloading table/instance data via short-lived connections. -
Reorderable Data Structures
IntroducedReorderableRecord
andReorderableStruct
entities.
Design Details
更新日志
[0.51.10-public] - 2025-03-11
功能增强
v0.51.10-SNAPSHOT
Release Note: Data Consistency Enhancement for Struct Handling (v0.51.10-SNAPSHOT)
Background
The Tunnel SDK transmits data to the server based on column indices (not column names). This requires users to construct Record
objects strictly following the column order defined in the TableSchema bound to the current session. However, this approach introduces complexity when building nested Struct
types, as field order mismatches can lead to data inconsistency.
Solutions
1. ReorderableStruct
for Flexible Struct Construction
Problem: Directly constructing Struct
via field names may result in order mismatches with the target schema.
Solution:
Introducing ReorderableStruct
(implements Struct
interface) with the following features:
- Constructor:
public ReorderableStruct(StructTypeInfo type)
- Field Setting Methods:
public void setFieldValue(String fieldName, Object value) // Set by field name (case-insensitive) public void setFieldValue(int index, Object value) // Set by index
- Example:
ReorderableStruct person = new ReorderableStruct(personStructType); person.setFieldValue("money", 1234L); // Field order irrelevant person.setFieldValue("age", 25); person.setFieldValue("name", "Jason");
- Behavior:
Ensures internal field order aligns with the schema, even if fields are set out-of-order.
2. ReorderableRecord
for Automatic Schema Alignment
Problem: Structs constructed outside the SDK may have field orders incompatible with the target schema.
Solution:
Introducing ReorderableRecord
(extends ArrayRecord
), which automatically reorders Struct
fields (including nested types like Array<Struct>
or Map<Struct>
) to match the schema:
- Usage:
TableTunnel.StreamUploadSession uploadSession; Struct upstreamData; Record record = new ReorderableRecord(uploadSession.getSchema()); // Bind to schema record.set("struct", upstreamData); // Automatic reordering
- Performance Note:
Reordering incurs additional computational overhead. Use this approach only when schema alignment is uncertain.
Key Constraints
The reorder
method enforces strict schema consistency:
- Field names, data types, and nested structures (including maps/arrays) must exactly match between the
Struct
and target schema (order-independent). - Exceptions:
IllegalArgumentException
is thrown for mismatches (e.g., missing fields, type conflicts, or nested schema inconsistencies).
v0.51.9-public
[0.51.9-public] - 2025-02-26
Fixes
- Struct Field Escaping
FixedgetName(true)
not adding backticks to all nested struct field names inTypeInfo
.
[0.51.9-public] - 2025-02-26
问题修复
- 结构体字段转义修复
修复TypeInfo
中getName(true)
方法未对嵌套结构体字段名添加反引号的问题
v0.51.8-public
Changelog
[0.51.8-public] - 2025-02-20
Changes
- Record The
set(String columnName, Object value)
method now ignores the case ofcolumnName
. ThegetColumn
method will always return column names in lowercase.
Features
- Table Added
getMetadataJson
andgetExtendedInfoJson
methods. - Partition Added
getMetadataJson
,getExtendedInfoJson
,getCdcSize
, andgetCdcRecordNum
methods. - CommandApi Enhanced the
DescribeTableCommand
to include additionalMetadataJson
andExtendedInfoJson
fields in the response. - PartitionSpec Improved error messages for build failures to provide clearer debugging information.
v0.51.7-public
Changelog
[0.51.7-public] - 2025-02-13
Features
- EPV2 Added support for EPV2 (External Project V2), including
ListTable
,ListSchema
,DescribeTable
interfaces - MCQA Added fallback logging when retrieving results via InstanceTunnel encounters failure rollback scenarios
更新日志
[0.51.7-public] - 2025-02-13
功能
- EPV2 新增对 EPV2(External Project V2)的支持,包括
ListTable
,ListSchema
,DescribeTable
等接口 - MCQA 在通过 InstanceTunnel 取结果,发生失败回退的场景,加入回退日志
v0.51.6-public
[0.51.6-public] - 2025-01-26
Fixes
- TypeInfo Fixed an issue where
StructTypeInfo
nested withinArrayTypeInfo
orMapTypeInfo
would not quote field names in nested structures when usinggetTypeName(true)
method
[0.51.6-public] - 2025-01-26
修复
- TypeInfo 修复了当
StructTypeInfo
嵌套在ArrayTypeInfo
或MapTypeInfo
内时,getTypeName(true)
方法不会对嵌套内字段名进行 quote 的问题。