すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:Java 用 SDK

最終更新日:May 24, 2025

Java SDK は、MaxCompute によって提供される Java プログラミング言語インターフェイスのセットです。これらのインターフェイスを使用すると、Java コードを使用して、プロジェクトへのアクセスと管理、データテーブルの操作、データ転送、関数管理など、MaxCompute サービスを操作および管理できます。このトピックでは、Java 用 MaxCompute SDK が提供するパッケージと、インスタンス、リソース、テーブル、関数などの SDK のコアクラスについて説明します。

説明

Java 用 MaxCompute SDK を使用して MaxCompute が提供するコンピューティングおよびストレージサービスにアクセスする場合、他の方法でサービスにアクセスする場合と同じ方法で課金されます。 詳細については、「」をご参照ください。

ストレージの料金 (従量課金)コンピューティングの料金 (従量課金)、および ダウンロードの料金 (従量課金)

背景情報

このトピックでは、Java 用 MaxCompute SDK のコアクラスについて説明します。 SDK の詳細については、ODPS SDK Core 0.45.1-public API をご参照ください。

Maven を使用して、使用する SDK のバージョンを構成できます。 たとえば、使用する odps-sdk-core のバージョンを指定するには、次の Maven 依存関係を追加します。

<dependency>
  <groupId>com.aliyun.odps</groupId>
  <artifactId>odps-sdk-core</artifactId>
  <version>X.X.X-public</version>
</dependency>
説明
  • MaxCompute V2.0 データ型エディションで導入された 新しいデータ型 は、0.27.2-public 以降のバージョンの SDK でのみサポートされています。

  • search.maven.org で odps-sdk-core を検索すると、SDK の最新バージョンを入手できます。

次の表に、Java 用 MaxCompute SDK が提供するパッケージを示します。

パッケージ名

説明

odps-sdk-core

テーブルとプロジェクトの管理を可能にする機能など、MaxCompute の基本機能を提供します。 このパッケージを使用して、Tunnel サービスにアクセスすることもできます。

odps-sdk-commons

共通ユーティリティを提供します。

odps-sdk-udf

ユーザー定義関数 (UDF) 機能を提供します。

odps-sdk-mapred

MapReduce 機能を提供します。

odps-sdk-graph

Java 用 Graph SDK を提供します。 odps-sdk-graph を検索することで SDK を入手できます。

AliyunAccount

この API を呼び出して、Alibaba Cloud アカウントを取得できます。 AliyunAccount クラスのコンストラクターは、入力パラメーターとして AccessKey ID と AccessKey シークレットを使用します。 AccessKey ID と AccessKey シークレットは、Alibaba Cloud ユーザーを認証するために使用される AccessKey ペアを構成します。 この API は、MaxCompute を初期化するために使用されるクラスとも見なされます。

ODPS

Odps クラスは、Java 用 MaxCompute SDK のエントリポイントです。 Odps クラスを使用すると、プロジェクトテーブルリソース関数インスタンス など、MaxCompute 内のすべてのタイプのオブジェクトにアクセスできます。

AliyunAccount オブジェクトを Odps クラスのコンストラクターに渡して、Odps オブジェクトを作成できます。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、Resource Access Management (RAM) コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");
for (Table t : odps.tables()) {
    ....
}              

MaxCompute Tunnel

MaxCompute Tunnel は、Tunnel SDK 上に構築されています。 これにより、Tunnel を介して MaxCompute テーブル (ビューを除く) にデータをアップロードしたり、MaxCompute テーブルからデータをダウンロードしたりできます。

MapReduce

MapReduce でサポートされている SDK の詳細については、「概要」をご参照ください。

Projects

Projects クラスは、MaxCompute 内のすべてのプロジェクトのコレクションを定義します。 各 MaxCompute プロジェクトは、コレクション内の要素です。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Project p = odps.projects().get("my_exists");
p.reload();
...

Project

Project クラスは、プロジェクトの詳細を定義します。 Projects クラスの get メソッドを呼び出すことで、指定されたプロジェクトを取得できます。

SQLTask

SQLTask クラスを使用すると、MaxCompute で SQL 文を実行および処理できます。 SQLTask クラスの 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 {
        // Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
				// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
				// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
				private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
				private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");     
        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();
        }
    }
}
説明
  • 一度に送信して実行できる SQL 文は 1 つだけです。

  • Java 用 MaxCompute SDK を使用してテーブルを作成するには、Table クラスではなく SQLTask クラスを使用する必要があります。 SQLTask オブジェクトを使用して CREATE TABLE 文を実行する前に、CREATE TABLE 文を SQLTask に渡す必要があります。 CREATE TABLE 文の詳細については、「テーブル操作」をご参照ください。

Instances

Instances クラスは、MaxCompute 内のすべてのインスタンスのコレクションを定義します。 各インスタンスは、コレクション内の要素です。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
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 クラスの get メソッドを呼び出すことで、指定されたインスタンスを取得できます。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
Instance instance= 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("task name");
String s = summary.getSummaryText();

Tables

Tables クラスは、MaxCompute 内のすべてのテーブルのコレクションを定義します。 各テーブルは、コレクション内の要素です。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
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 クラスの get メソッドを呼び出すことで、指定されたテーブルを取得できます。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
String odpsUrl = "<your odps endpoint>";
odps.setEndpoint(odpsUrl);
odps.setDefaultProject("my_project");

Table table = odps.tables().get("tablename");
for(Column c : table.getSchema().getColumns()) 
{
String name = c.getName();
TypeInfo type = c.getTypeInfo();
 }

次のコードは、テーブルのパーティション内のデータを取得する方法を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
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("partition_col=partition_col_value"));
part.reload();
...

Resources

Resources クラスは、MaxCompute 内のすべてのリソースのコレクションを定義します。 各リソースは、コレクション内の要素です。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
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 クラスの get メソッドを呼び出すことで、指定されたリソースを取得できます。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
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 内のすべての関数のコレクションを定義します。 各関数は、コレクション内の要素です。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
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 クラスの get メソッドを呼び出すことで、指定された関数を取得できます。 次のコードは例を示しています。

// Alibaba Cloud アカウントの AccessKey ペアには、すべての API 操作に対する権限があります。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 API 操作の呼び出しや日常的な O&M の実行には、RAM ユーザーを作成して使用することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。 ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
// AccessKey ペアの漏洩を防ぐため、コード内で AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
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);              

参照

Python を使用して MaxCompute 内のデータを操作および処理する場合は、「概要」をご参照ください。