更新日志
[0.51.2-public] - 2024-12-20
功能
- Authorization 引入
credential-java
鉴权包,现在能够使用AlibabaCloudCredentialsProvider
进行鉴权 - StreamUploadSession 新增对 Slot 更新的感知和自动重试逻辑
- table-api 引入
TableRetryHandler
类,为table-api
添加重试逻辑 - udf 中
InputSplitter
新增方法setLimit
变更
- TypeInfo
StructTypeInfo
新增方法getTypeName(boolean quote)
,在0.51.0-public (rc0)
版本,StructTypeInfo
默认会对字段名使用反引号进行 quote,我们怀疑这项变更对用户有影响,因此决定恢复原行为(默认不进行quote) 而是当用户需要 quote 时,可以调用getTypeName(true)
修复
- TypeInfo 当对字段使用反引号进行 quote 时,现在会正确对字段名进行转义
- MCQA2 修复了 MCQA2 作业调用
getRawTaskResults
接口取不到结果的问题
[0.51.0-public] - 2024-12-05
功能
- MapReduce 支持多重管道输出 (multi pipeline output)。
- VolumeBuilder 新增
accelerate
方法,用于在 external volume 过大时,使用 dragonfly 加速下载过程。 - Table 新增
TableType OBJECT_TABLE
和判断方法isObjectTable
。 - Project
list
方法增加过滤条件enableDr
,用 于过滤项目是否开启存储容灾。 - Cluster 新增字段
clusterRole
、jobDataPath
、zoneId
。
变更
- TableBatchReadSession 类变量
predicate
现在设置为 transient。 - Attribute 增加转义逻辑,并不再会 double quote。
- SQLTask 恢复了在 0.49.0 版本移除的
SQLTask.run(Odps odps, String project, String sql, String taskName, Map<String, String> hints, Map<String, String> aliases, int priority)
方法,以解决用户的 MR 作业依赖老版本 SDK 时可能发生的接口冲突问题。
修复
- Table.changeOwner 修复 SQL 拼写错误。
- Instance.getTaskSummary 移除自 0.50.2 版本开始的不合理打印的 debug 日志。
- TruncTime 在建表/toString 时,使用反引号对
columnName
进行 quote。
注意: 此版本还包括“0.51.0-public.rc0”和“0.51.0-public.rc1”的所有更改。
[0.50.6-public] - 2024-11-27
- Logview 新增对 Logview V2 的支持,V2 版本保障了数据安全,更多信息参考 2024年11月14日-MaxCompute Logview安全升级 。可以通过
new Logview(odps, 2)
创建,SQLExecutor 通过logviewVersion
方法指定。
[0.51.0-public.rc1] - 2024-11-22
功能与变更
- Column
ColumnBuilder
新增withGenerateExpression
方法,用于构造 auto-partition 列 - TableSchema
- 新增
generatePartitionSpec
方法,用于从Record
中生成分区信息 setPartitionColumns
方法现在接收List<Column>
,而不是ArrayList<Column>
- 新增
- TableCreator
- 新增对
GenerateExpression
的支持,新增方法autoPartitionBy
,现在可以创建 AutoPartition 表了 - 新增对
ClusterInfo
的支持,现在可以创建 Hash/Range Cluster 表了 - 新增指定
TableFormat
,现在可以指定创建APPEND
,TRANSACTION
,DELTA
,EXTERNAL
,VIEW
格式的表 - 新增
selectStatement
参数,用于create table as
和create view as
场景 - 新增
getSql
方法,用于获取创建表的 SQL 语句 - 现在会对所有的
Comment
参数进行 quote,以支持包含特殊字符的Comment
参数 - 将 DataHub 相关的建表参数(
hubLifecycle
,shardNum
) 整合为DataHubInfo
- 重命名
withJars
方法为withResources
,以表示不仅可以使用JAR类型资源 - 重命名
withBucketNum
方法为withDeltaTableBucketNum
,以表示该方法仅用于 Delta Table - 修改了
withHints
,withAlias
,withTblProperties
,withSerdeProperties
方法的逻辑,现在会覆盖之前设置的值,而不是合并 - 移除了
createExternal
方法,现在使用create
方法即可
- 新增对
- Table
- 新增
getSchemaVersion
方法,用户获取当前表结构的版本,用户每次进行 SchemaEvolution 都会更新版本号,目前该字段仅用于在创建 StreamTunnel 时指定 - 新增
setLifeCycle
,changeOwner
,changeComment
,touch
,changeClusterInfo
,rename
,addColumns
,dropColumns
方法,以支持对表结构进行修改
- 新增
- StreamTunnel 修改初始化逻辑,当指定
allowSchemaMismatch
为false
时,会自动重试直到使用最新版本的表结构(超时时间为5min)
修复
- GenerationExpression 修复了当建表时
TruncTime
为大写,reload table 会抛出异常的问题 - TypeInfoParser 能够正确处理
Struct
类型,字段被反引号quote的TypeInfo
了
[0.51.0-public.rc0] - 2024-11-18
功能
- GenerateExpression 增加对分区列的生成列表达式功能的支持,和第一个生成列表达式
TruncTime
,使用方式请参考Example - UpsertStream 支持写入主键为
TIMESTAMP_NTZ
类型的值 - Table 新增对 cdc 相关数据的查询,
getCdcSize()
,getCdcRecordNum()
,getCdcLatestVersion()
,getCdcLatestTimestamp()
- SQLExecutor MCQA 2.0 作业支持获取 InstanceProgress 信息
变更
- TypeInfo 对 Struct 类型的 TypeInfo,和其他拼装 SQL 的方法,使用反引号对名字进行 quote
- AutoClosable 为了提醒用户正确关闭资源,对下列资源类,增加了相应的
close()
方法,以提醒用户正确关闭资源。odps-sdk-core
包下的UpsertStream
,odps-sdk-impl
包下的LocalOutputStreamSet
,ReduceDriver.ReduceContextImpl
,MapDriver.DirectMapContextImpl
,LocalRecordWriter
odps-sdk-udf
包下的VectorizedOutputer
,VectorizedExtractor
,RecordWriter
,RecordReader
,Outputer
,Extractor
[0.50.5-public] - 2024-11-13
功能
- TableAPI
为可以安全重试的网络请求类型的报错增加了相应的重试逻辑,从而提高了接口的稳定性。在
RestOptions
中增加了retryWaitTimeInSeconds
配置项,用于设置重试等待时间。 - SQLTask 新增了
run
方法的重载,支持传入mcqaConnHeader
参数,以便提交 MCQA 2.0 作业。 - SQLExecutor 支持通过指定
hints
中的odps.task.wlm.quota
来设置提交 MCQA 2.0 作业时的 interactive quota。 - RestClient 新增了
retryWaitTime
参数,以及相应的 getter 和 setter 方法,以配置网络请求的重试等待时间。 - Configuration 新增了
socketRetryTimes
参数以及相应的 getter 和 setter 方法,用于配置 Tunnel 网络请求的重试等待时间。如果未设置,则使用RestClient
中的配置,否则使用此配置。
变更
- Instances 移除了
get
的重载方法get(String projectName, String id, String quotaName, String regionId)
,该方法在0.50.2-public
版本中新增,用于获取 MCQA 2.0 实例。现在, 用户在使用get
方法时无须区分作业是否为 MCQA 2.0 作业,因此移除该方法可以直接使用get(String projectName, String id)
方法来获取实例。
修复
- Table.read() 修复了在数据预览时,配置的网络相关参数(如超时时间、重试逻辑)无法正确生效的问题。
- Streams 修复了
create
方法中,如果指定了version
会报错的问题。同时增加了version
的默认值(1),表示表的初始版本。
[0.50.4-public] - 2024-10-29
功能
- PartitionSpec 新增
(String, boolean)
构造方法,通过布尔参数指定是否对分区值进行trim操作,以满足某些场景(如使用char类型作为分区字段)用户不希望trim的需求。
变更
- Instance 在调用stop方法时,抛出的OdpsException将不再被二次包装。
修复
- SQLExecutor
- 修复了在MCQA 1.0模式下,用户指定
fallbackPolicy.isFallback4AttachError
时未正确生效的问题。 - 修复了在MCQA 2.0模式下,作业失败时
cancel
方法抛出异常的问题。 - 修复了在MCQA 2.0模式下,当isSelect判断错误时,通过instanceTunnel取结果报错的问题。
- 修复了在MCQA 1.0模式下,用户指定
- Table 修复了
getPartitionSpecs
方法会trim分区值,导致无法获取存在的分区的问题。
[0.50.3-public] - 2024-10-23
功能
- SQLExecutor 在 MCQA 1.0 模式下,允许增加自定义回退策略,新增类
FallbackPolicy.UserDefinedFallbackPolicy
。
[0.50.2-public] - 2024-10-23
功能
- SQLExecutor 增强 MCQA 2.0 功能:
isActive
将返回 false,指示在 MCQA 2.0 模式下没有活跃的 Session。- 新增
cancel
方法,用于中止正在执行的作业。 getExecutionLog
现在返回当前日志的深拷贝并清空当前日志,避免重复获取。- 在
SQLExecutorBuilder
新增quota
方法,支持复用已加载的Quota
,减少加载时间。 - 在
SQLExecutorBuilder
新增regionId
方法,允许指定 quota 所在的 region。
- Quotas 新增带
regionId
参数的getWlmQuota
方法,用于获取指定 regionId 的 quota。 - Quota 新增
setMcqaConnHeader
方法,支持用户通过自定义的 McqaConnHeader 重载 quota,以适配 MCQA 2.0。 - Instances 新增适用于 MCQA 2.0 的
get
方法,需额外传入 MCQA 2.0 的 QuotaName 和 RegionId。 - Instance 进一步适配 MCQA 2.0 作业。
- TableSchema
basicallyEquals
方法将不再严格检查两个类的 Class 类型一致性。
优化
- SQLExecutor
run
方法中的 hints 现在会进行深拷贝,保护用户传入的 Map,支持不可变类型(如ImmutableMap
)。
修复
- Stream 修复
create
方法中的潜在 SQL 语法错误。
[0.50.1-public] - 2024-10-11
修复
- TableAPI 修复了使用
SplitRecordReaderImpl
获取结果时,拿到了ArrayRecord
无法正确toString
的问题。 - TableAPI 修复了使用
SplitRecordReaderImpl
获取结果时,如果Split
对应的Record
数量为0,在get
操作时会抛出数组越界异常的问题。 - TableAPI 修复了复合谓词
CompositePredicate
在遇到空谓词时,可能额外增加一次操作符的问题。
[0.50.0-public] - 2024-10-09
功能
- 新增
SchemaMismatchException
异常:当使用StreamUploadSession
时,如果用户上传的 Record 结构与表结构不匹配,将抛出该异常。此异常将额外携带最新的 schema version,方便用户重建 Session 并进行重试操作。 - 在
StreamUploadSession.Builder
中新增allowSchemaMismatch
方法,用于指定是否容忍用户上传的 Record 结构与表结构不匹配时是否抛出异常。默认值为true
。
修复
- 修复了在 Odps 中指定
tunnelEndpoint
时,使用StreamUploadSession
无法生效的问题。 - 修复了
TunnelRetryHandler
潜在的 NPE 问题。
[0.50.0-rc1] - 2024-09-19
功能
- SQLExecutor 新增
isUseInstanceTunnel
方法:- 用来判断是否使用 instanceTunnel 取结果
修复
- 修复了使用 SQLExecutor 执行 MCQA 2.0 作业时,执行 CommandApi 任务会影响下一次作业,导致取结果时抛出NPE的问题。
[0.50.0-rc0] - 2024-09-18
功能
- SQLExecutor 支持提交 MCQA 2.0 作业
- SQLExecutorBuilder 新增方法
enableMcqaV2
- SQLExecutorBuilder 新增对字段的 getter 方法
- SQLExecutorBuilder 新增方法
- SQLExecutor 新增
getQueryId
方法:- 对于离线作业和 MCQA 2.0 作业,会返回当前执行的作业 InstanceId
- 对于 MCQA 1.0 作业,会返回 InstanceId 和 SubQueryId
- TableAPI
EnvironmentSettings
新增SharingQuotaToken
参数,以支持提交作业时携带Quota资源共享临时凭证 - Quotas 新增
getWlmQuota
方法:- 能够根据 projectName 和 quotaNickName 获取到 quota 的详细信息,比如是否属于交互式 quota
- Quota 类新增
isInteractiveQuota
方法,用来判断 quota 是否属于交互式 quota(适用于 MCQA 2.0) - 新增
getResultByInstanceTunnel(Instance instance, String taskName, Long limit, boolean limitEnabled)
方法:- 用来无限制地通过 instanceTunnel 获取结果(解除限制需要更高的权限)
- UpsertSession.Builder 新增
setLifecycle
方法,用来配置 Session 生命周期
修复
- 修复了使用 SQLExecutor 执行离线作业时,指定
limitEnabled
取结果但不生效的问题 - 修改了 SQLExecutor 执行离线作业时,
getQueryId
方法会返回作业的 instanceID 而非 null - 修复了 SQLExecutor 执行离线作业时,当遇到非 select 语句时,使用 instanceTunnel 取结果不再抛出异常,而是回退到非 tunnel 逻辑
- 修复了使用 DownloadSession 下载数据时,发生错误且读取数量刚好等于要读取记录的数量 - 1 时重建漏掉一条数据的问题
- Odps 类的
clone
方法现在能正确克隆包括tunnelEndpoint
等其他字段 - Instance 的
getRawTaskResults
方法现在在处理同步作业时不会多次发起请求
[0.49.0-public] - 2024-09-12
功能
-
OdpsRecordConverter 功能增强:现在支持将数据转换为 SQL 兼容格式,比如对于
LocalDate
类型,数据可以转换为"DATE 'yyyy-mm-dd'"
格式。同时对于Binary
类型,现在支持了 hex 表示格式。 -
开放存储谓词下推常量增强:改进了
Constant
类行为,新增了Constant.of(Object, TypeInfo)
方法。现在当设定或识别出类型为时间类型时,可以正确转变为 SQL 兼容格式(也就是可以正确下推时间类型了)。同时修复了一些其他类型的问题,当无法转换成 SQL 兼容模式时,会在创建Session
的时候抛出IllegalArgumentException
。 -
UpsertSession 实现 Closable 方法:提醒用户应当正确释放 UpsertSession 的本地资源。
-
SQLExecutorBuilder 新增方法
offlineJobPriority
:用来设置当作业发生回退时,离线作业的优先级。 -
Table 类新增方法
getLastMajorCompactTime
:用来获取表最后一次 major compact 的时间。 -
Instance 类新增方法
create(Job job, boolean tryWait)
:当用户执行tryWait
为true
时,作业会尝试在服务端等待一段时间,以更快获取结果。 -
Resource 类增强:现在能够判断对应的资源是否属于临时资源。
-
CreateProjectParma 类增强 新增
defaultCtrlService
参数,用来指定项目的默认控制集群。
修复
-
UpsertStream NPE 修复:修复了在 flush 时,当发生本地错误时抛出 NPE 而无法正确重试的问题。
-
Varchar/Char 类型修复:修复了
Varchar/Char
类型获取其长度时,当遇到中文符号或表情等特殊字符,会错误的计算两次的问题。
[0.48.8-public] - 2024-08-12
增强
- 引入了对复合谓词表达式的内部验证,修复了处理无效或总是真/假谓词时的逻辑,增强了测试覆盖,确保了在复杂查询优化中的稳定性和准确性。
[0.48.7-public] - 2024-08-07
增强
- TableTunnel 配置优化:引入
tags
属性至TableTunnel Configuration
,旨在允许用户为隧道相关操作附上自定义标签。这些标签会被记录在租户层级的information schema
中,便于日志追踪与管理。
Odps odps;
Configuration configuration=
Configuration.builder(odps)
.withTags(Arrays.asList("tag1","tag2")) // 使用 Arrays.asList 以提升代码规范性
.build();
TableTunnel tableTunnel=odps.tableTunnel(configuration);
// 继续执行隧道相关操作
- Instance 增强:在
Instance
类中新增waitForTerminatedAndGetResult
方法,此方法整合了 0.48.6 及 0.48.7 版本中对SQLExecutor
接口的优化策略,提升了操作效率。使用方式可参考com.aliyun.odps.sqa.SQLExecutorImpl.getOfflineResultSet
方法。
优化
- SQLExecutor 离线作业处理优化:显著减少了端到端延迟,通过改进使得由
SQLExecutor
执行的离线作业能在关键处理阶段完成后即刻获取结果,无需等待作业全部完成,提高了响应速度和资源利用率。
修复
- TunnelRetryHandler NPE修复:修正了
getRetryPolicy
方法中在错误码 (error code
) 为null
的情况下潜在空指针异常问题。
[0.48.6-public] - 2024-07-17
新增
- 支持序列化:
- 主要数据类型如
ArrayRecord
、Column
、TableSchema
和TypeInfo
现在支持序列化和反序列化,能够进行缓存和进程间通信。
- 主要数据类型如
- 谓词下推:
- 新增
Attribute
类型的谓词,用于指定列名。
- 新增
变更
- Tunnel 接口重构:
- 重构了 Tunnel 相关接口,加入了无感知的重试逻辑,大大增强了稳定性和鲁棒性。
- 删除了
TunnelRetryStrategy
和ConfigurationImpl
类,分别被TunnelRetryHandler
和Configuration
所取代。
优化
- SQLExecutor 优化:
- 在使用
SQLExecutor
接口执行离线 SQL 作业时进行优化,减少每个作业获取结果时的一次网络请求,从而减少端到端延时。
- 在使用
修复
- Table.read Decimal 读取:
- 修复了
Table.read
接口在读取decimal
类型时,后面补零不符合预期的问题。
- 修复了