本文將為您介紹較為常用的 MaxCompute 核心介面,更多詳情請參見 SDK Java Doc

您可以通過 Maven 管理配置新 SDK 的版本。Maven 的配置資訊如下(最新版本可以隨時到 search.maven.org 搜尋 odps-sdk-core 擷取):
<dependency>
  <groupId>com.aliyun.odps</groupId>
  <artifactId>odps-sdk-core</artifactId>
  <version>0.26.2-public</version>
</dependency>
MaxCompute 提供的 SDK 包整體資訊,如下表所示:
包名 描述
odps-sdk-core MaxCompute 的基礎功能,例如:對錶,Project 的操作,以及 Tunnel 均在此包中
odps-sdk-commons 一些 Util 封裝
odps-sdk-udf UDF 功能的主體介面
odps-sdk-mapred MapReduce 功能
odps-sdk-graph Graph Java SDK,搜尋關鍵詞“odps-sdk-graph”

AliyunAccount

阿里雲認證帳號。輸入參數為 accessId 及 accessKey,是阿里雲使用者的身份標識和認證密鑰。此類用來初始化 MaxCompute。

MaxCompute

MaxCompute SDK 的入口,您可通過此類來擷取項目空間下的所有對象集合,包括:ProjectsTablesResourcesFunctionsInstances
说明 MaxCompute 原名 ODPS,因此在現有的 SDK 版本中,入口類仍命名為 ODPS。
您可以通過傳入 AliyunAccount 執行個體來構造 MaxCompute 對象。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    odps.setDefaultProject("my_project");
    for (Table t : odps.tables()) {
        ....
    }

Projects

Projects 是 MaxCompute 中所有項目空間的集合。集合中的元素為 Project。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    Project p = odps.projects().get("my_exists");
    p.reload();
    Map<String, String> properties = prj.getProperties();
    ...

Project

Project 是對項目空間資訊的描述,可以通過 Projects 擷取相應的項目空間。

SQLTask

SQLTask 是用於運行、處理 SQL 任務的介面。可以通過 run 介面直接運行 SQL。( 注意:每次只能提交運行一個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 odps = new Odps(account);
       odps.setEndpoint(endPoint);
       odps.setDefaultProject(project);
       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 介面。您需要將表操作的語句傳入SQLTask。

Instances

Instances 是 MaxCompute 中所有執行個體(Instance)的集合,集合中的元素為 Instance。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    odps.setDefaultProject("my_project");
    for (Instance i : odps.instances()) {
        ....
    }

Instance

Instance 是對執行個體資訊的描述,可以通過 Instances 擷取相應的執行個體。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    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

Tables 是 MaxCompute 中所有表的集合,集合中的元素為 Table。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    odps.setDefaultProject("my_project");
    for (Table t : odps.tables()) {
        ....
    }

Table

Table 是對錶資訊的描述,可以通過 Tables 擷取相應的表。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    Table t = odps.tables().get("table name");
    t.reload();
    Partition part = t.getPartition(new PartitionSpec(tableSpec[1]));
    part.reload();
    ...

Resources

Resources 是 MaxCompute 中所有資源的集合。集合中的元素為 Resource。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    odps.setDefaultProject("my_project");
    for (Resource r : odps.resources()) {
        ....
    }

Resource

Resource 是對資源資訊的描述,可以通過 Resources 擷取相應的資源。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    Resource r = odps.resources().get("resource name");
    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

Functions 是 MaxCompute 中所有函數的集合。集合中的元素為 Function。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    odps.setDefaultProject("my_project");
    for (Function f : odps.functions()) {
        ....
    }

Function

Function 是對函數資訊的描述,可以通過 Functions 擷取相應的函數。程式樣本如下:
    Account account = new AliyunAccount("my_access_id", "my_access_key");
    Odps odps = new Odps(account);
    String odpsUrl = "<your odps endpoint>";
    odps.setEndpoint(odpsUrl);
    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);