开放数据处理服务 ODPS SDK
SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些 Util 封装, 搜索关键词 "odps-sdkcommons" UDF 功能的主体接口, 搜索关键词 "odps-sdkudf" MapReduce Java SDK, 搜索关键词 "odps-sdkmapred" Graph Java SDK, 搜索关键词 "odps-sdk-graph" AliyunAccount 阿里云认证账号 输入参数为 accessid 及 accesskey, 是阿里云用户的身份标识和认证密钥 此类用来初始化 Odps Odps ODPS SDK 的入口, 用户通过此类来获取项目空间下的所有对象集合, 包括 : Projects,Tables,Resources,Functions,Instances 用户可以通过传入 AliyunAccount 实例来构造 ODPS 对象 程序示例如下 : for (Table t : odps.tables()) { 1
Projects ODPS 中所有项目空间的集合 集合中的元素为 Project 程序示例如下 : Project p = odps.projects().get("my_exists"); p.reload(); Map<String, String> properties = prj.getproperties();... Project 对项目空间信息的描述, 可以通过 Projects 获取相应的项目空间 SQLTask 用于运行 处理 SQL 任务的接口 可以通过 run 接口直接运行 SQL run 接口返回 Instance 实例, 通过 Instance 获取 SQL 的运行状态及运行结果 程序示例如下, 仅供参考 : import java.util.list; import com.aliyun.odps.instance; import com.aliyun.odps.odps; import com.aliyun.odps.odpsexception; import com.aliyun.odps.account.account; import com.aliyun.odps.account.aliyunaccount; import com.aliyun.odps.data.record; import com.aliyun.odps.task.sqltask; public class testsql { private static final String accessid = ""; private static final String accesskey = ""; private static final String endpoint = "http://service.odps.aliyun.com/api"; private static final String project = ""; private static final String sql = "select category from iris;"; public static void main(string[] args) { Account account = new AliyunAccount(accessId, accesskey); odps.setendpoint(endpoint); odps.setdefaultproject(project); 2
Instance i; try { i = SQLTask.run(odps, sql); i.waitforsuccess(); List<Record> records = SQLTask.getResult(i); for(record r:records){ System.out.println(r.get(0).toString()); catch (OdpsException e) { e.printstacktrace(); 如果用户想创建表, 需要通过 SQLTask 接口, 而不是 Table 接口 用户需要将创建表 (CREATE TABLE) 的语句传入 SQLTask Instances Instances ODPS 中所有实例 (Instance) 的集合 集合中的元素为 Instance 程序示例如下 : for (Instance i : odps.instances()) { Instance 对实例信息的描述, 可以通过 Instances 获取相应的实例 程序示例如下 : 3
Instance ins = odps.instances().get("instance id"); Date starttime = instance.getstarttime(); Date endtime = instance.getendtime();... Status instancestatus = instance.getstatus(); String instancestatusstr = null; if (instancestatus == Status.TERMINATED) { instancestatusstr = TaskStatus.Status.SUCCESS.toString(); Map<String, TaskStatus> taskstatus = instance.gettaskstatus(); for (Entry<String, TaskStatus> status : taskstatus.entryset()) { if (status.getvalue().getstatus()!= TaskStatus.Status.SUCCESS) { instancestatusstr = status.getvalue().getstatus().tostring(); break; else { instancestatusstr = instancestatus.tostring();... TaskSummary summary = instance.gettasksummary("instance name"); String s = summary.getsummarytext(); Tables ODPS 中所有表的集合 集合中的元素为 Table 程序示例如下 : for (Table t : odps.tables()) { 4
Table 对表信息的描述, 可以通过 Tables 获取相应的表 程序示例如下 : Table t = odps.tables().get("table name"); t.reload(); Partition part = t.getpartition(new PartitionSpec(tableSpec[1])); part.reload();... Resources ODPS 中所有资源的集合 集合中的元素为 Resource 程序示例如下 : for (Resource r : odps.resources()) { Resource 对资源信息的描述, 可以通过 Resources 获取相应的资源 程序示例如下 : Resource r = odps.resources().get("resource name"); 5
r.reload(); if (r.gettype() == Resource.Type.TABLE) { TableResource tr = new TableResource(r); String tablesource = tr.getsourcetable().getproject() + "." + tr.getsourcetable().getname(); if (tr.getsourcetablepartition()!= null) { tablesource += " partition(" + tr.getsourcetablepartition().tostring() + ")"; 一个创建文件资源的示例 : String projectname = "my_porject"; String source = "my_local_file.txt"; File file = new File(source); InputStream is = new FileInputStream(file); FileResource resource = new FileResource(); String name = file.getname(); resource.setname(name); odps.resources().create(projectname, resource, is); 一个创建表资源的示例 : TableResource resource = new TableResource(tableName, tableprj, partitionspec); //resource.setname(invalid_user_table); resource.setname("table_resource_name"); odps.resources().update(projectname, resource); Functions ODPS 中所有函数的集合 集合中的元素为 Function 程序示例如下 : for (Function f : odps.functions()) { 6
Function 对函数信息的描述, 可以通过 Functions 获取相应的函数 程序示例如下 : Function f = odps.functions().get("function name"); List<Resource> resources = f.getresources(); 一个创建函数的示例 : String resources = "xxx:xxx"; String classtype = "com.aliyun.odps.mapred.open.example.wordcount"; ArrayList<String> resourcelist = new ArrayList<String>(); for (String r : resources.split(":")) { resourcelist.add(r); Function func = new Function(); func.setname(name); func.setclasstype(classtype); func.setresources(resourcelist); odps.functions().create(projectname, func); 7