SQLExecutor
概述
SQLExecutor 是 MaxCompute 为执行 SQL 提供的统一的接口 ,用户可以通过这一接口,提交离线作业,MCQA和MaxQA
作业,并提供了丰富的配置和方法,来满足用户多样的需求。
目录
构建SQLExecutor实例
odps-sdk 使用SQLExecutorBuilder类来构建SQLExecutor实例,SQLExecutorBuilder
采用构造者模式,提供了一系列方法来对SQLExecutor进行配置。
通过这些方法,用户可以设置执行模式、任务名称、服务名称等参数,通常每个参数都有默认值,用户可以按需使用。
构造器方法
使用SQLExecutorBuilder.builder方法可以构建一个SQLExecutorBuilder实例。调用build
方法可以构建SQLExecutor实例。全部配置项参考配置选项。
public SQLExecutor build()throws OdpsException
返回值:
SQLExecutor实例。
示例代码:
SQLExecutor executor = SQLExecutorBuilder.builder()
.odps(odps)
.taskName("my_task")
.build();
配置选项
SQLExecutorBuilder类提供了多种配置选项,以下是各配置选项的详细说明。
设置ODPS对象(必选)
使用odps
方法可以设置ODPS对象。构建ODPS对象的方式请参考构建 ODPS 客户端。
public SQLExecutorBuilder odps(Odps odps)
参数:
odps:Odps对象。
设置任务名称
使用taskName方法可以设置任务名称。对于 MCQA 作业,默认 taskName 为 console_sqlrt_task。
对于 MaxQA 作业,默认 taskName 为 AnonymousMCQATask。
对于离线作业,无法配置 taskName,会使用 AnonymousSQLTask 作为 taskName。
public SQLExecutorBuilder taskName(String taskName)
参数:
taskName:任务名称。
设置Tunnel Endpoint
使用tunnelEndpoint方法可以设置Tunnel Endpoint。
这个接口常用于当用户网络环境受限,需要进行网络打通时,由odps endpoint自动路由的tunnel endpoint无法直接访问,需要设置指定tunnel endpoint时使用。
public SQLExecutorBuilder tunnelEndpoint(String tunnelEndpoint)
参数:
tunnelEndpoint:Tunnel Endpoint。
设置Quota名称
使用quotaName方法可以设置计算资源组的名称。
对于MaxQA的作业,此项为必填项,需要指定相应的交互式资源组名称,否则在创建SQLExecutor时将抛出异常。
public SQLExecutorBuilder quotaName(String quotaName)
参数:
quotaName:Quota名称(quota nick name)。
设置执行模式
使用executeMode方法可以设置执行模式。
public SQLExecutorBuilder executeMode(ExecuteMode executeMode)
参数:
executeMode:执行模式。可选项为 1.INTERACTIVE_V2:MaxQA;2.INTERACTIVE:MCQA;3.OFFLINE:离线执行。
使用 MaxQA
public SQLExecutorBuilder enableMcqaV2(boolean mcqaV2)
- 参数:
mcqaV2- 布尔值,表示是否启用 MaxQA。
启用命令API
使用enableCommandApi方法可以启用命令API。
CommandApi 是SQLExecutor
在标准SQL语法之外,额外提供的一组命令支持。用来执行像desc table,list table这样的非标准SQL命令。
目前 MaxCompute SQL 也在逐步支持类似扩展命令,因此当前版本部分扩展命令,开启这个选项后,行为会与不开启这个选项后不一致。
public SQLExecutorBuilder enableCommandApi(boolean useCommandApi)
参数:
useCommandApi:是否启用命令API。
启用三层模型支持
使用enableOdpsNamespaceSchema方法可以启用ODPS命名空间三层模型(Schema)。
三层模型是 MaxCompute 推出的新模式,将原project.table扩展为为project.schema.table模式
public SQLExecutorBuilder enableOdpsNamespaceSchema(boolean odpsNamespaceSchema)
参数:
odpsNamespaceSchema:是否开启三层模型支持。
是否启用 InstanceTunnel
在获取作业结果时,是否使用 instance tunnel 来取结果。默认值为true。
当不开启instance tunnel时,获取结果时的Record的中每条数据类型均为String
,忽略各列在ODPS中的真实类型,且会有最大长度限制(通常为10000),且无法指定offset,limit等信息。
但通常执行速度更快,用户可以根据使用场景选择是否关闭instance tunnel。
public SQLExecutorBuilder useInstanceTunnel(boolean useInstanceTunnel)
- 参数:
useInstanceTunnel- 布尔值,表示是否启用 InstanceTunnel。
设置InstanceTunnel取结果时的链接超时时间
public SQLExecutorBuilder tunnelSocketTimeout(int tunnelSocketTimeout)
- 参数:
tunnelSocketTimeout- 整数,表示超时时间(毫秒)。
设置InstanceTunnel取结果时的读取超时时间
public SQLExecutorBuilder tunnelReadTimeout(int tunnelReadTimeout)
- 参数:
tunnelReadTimeout- 整数,表示超时时间(毫秒)。
设置使用 InstanceTunnel 获取结果的最大重试次数
public SQLExecutorBuilder tunnelGetResultMaxRetryTime(int tunnelGetResultMaxRetryTime)
- 参数:
tunnelGetResultMaxRetryTime- 整数,表示最大重试次数。
配置当前使用的执行器池
通常由 SQLExecutorPool 自动调用
SQLExecutorBuilder setPool(SQLExecutorPool pool)
- 参数:
pool-SQLExecutorPool对象,表示执行器池。
设置恢复实例
用来从指定实例恢复SQLExecutor。
对于MCQA作业,instance为Session实例,这项操作表示重新链接到给定的Session。
对于其他类型作业,instance为SQLTask实例,这项操作表示重新链接到给定的SQLTask。
public SQLExecutorBuilder recoverFrom(Instance instance)
- 参数:
instance-Instance对象,表示恢复的实例。
设置离线作业的优先级
public SQLExecutorBuilder offlineJobPriority(Integer offlineJobPriority)
- 参数:
offlineJobPriority- 整数,表示离线作业的优先级。
加速失败回退策略(仅MCQA)
当执行失败时,是否回退到离线查询,采用什么策略回退。
public SQLExecutorBuilder fallbackPolicy(FallbackPolicy fallbackPolicy)