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

MaxCompute:Java SDK の概要

最終更新日:Mar 27, 2026

MaxCompute 向け Java SDK は、MaxCompute をプログラムで管理および操作するための一連の Java インターフェイスを提供します。この SDK を使用して、プロジェクトの管理、SQL ステートメントの実行、テーブルの操作、Tunnel を介したデータ転送、およびリソース・関数の管理が可能です。

SDK を通じて MaxCompute のコンピューティングおよびストレージサービスにアクセスした場合の課金は、他の方法でアクセスした場合と同様です。料金の詳細については、「ストレージ料金(従量課金)」「コンピューティング料金(従量課金)」「ダウンロード料金(従量課金)」をご参照ください。

SDK パッケージ

MaxCompute 向け Java SDK は、一連の Maven パッケージとして配布されます。

本トピックでは、MaxCompute の共通コアインターフェイスについて説明します。詳細については、「SDK JavaDoc」をご参照ください。

詳細については、「ストレージ料金(従量課金)」「コンピューティング料金(従量課金)」「ダウンロード料金(従量課金)」をご参照ください。

パッケージ 説明
odps-sdk-core コア機能:テーブルおよびプロジェクトの管理、Tunnel サービスへのアクセス
odps-sdk-commons 共通ユーティリティ
odps-sdk-udf ユーザー定義関数(UDF)機能
odps-sdk-mapred MapReduce 機能
odps-sdk-graph Graph SDK for Java

完全な API リファレンスについては、「ODPS SDK Core 0.45.1-public API」をご参照ください。

Maven 依存関係の追加

odps-sdk-corepom.xml に追加します:

<dependency>
  <groupId>com.aliyun.odps</groupId>
  <artifactId>odps-sdk-core</artifactId>
  <version>X.X.X-public</version>
</dependency>

最新バージョンを確認するには、「search.maven.org」で odps-sdk-core を検索してください。

MaxCompute V2.0 で導入された新規データ型を使用するには、SDK バージョン 0.27.2-public 以降が必要です。

クライアントの初期化

Odps オブジェクトは、すべての SDK 操作のエントリポイントです。これにより、プロジェクト、テーブル、インスタンス、リソース、関数など、すべての MaxCompute リソースにアクセスできます。

説明

MaxCompute は以前 ODPS と呼ばれていました。そのため、現在の SDK バージョンでもエントリクラス名は引き続き ODPS です。

Odps オブジェクトは、コンストラクターに AliyunAccount を渡すことで作成します。AliyunAccount には AccessKey ID と AccessKey Secret を指定します。これらは認証に使用される AccessKey ペアを構成します。

// AccessKey の認証情報を環境変数として保存し、
// コード内に直接記述しないでください。Alibaba Cloud アカウントの AccessKey ペアを使用すると、
// 全 API へのフルアクセス権限が付与されます。日常的な操作には RAM ユーザーを作成・使用してください。
// RAM ユーザーの作成方法については、Resource Access Management (RAM) コンソールをご参照ください。
Account account = new AliyunAccount(
    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
    System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
);
Odps odps = new Odps(account);
odps.setEndpoint("<your-odps-endpoint>");
odps.setDefaultProject("<your-project>");

以下のプレースホルダーを実際の値に置き換えてください:

プレースホルダー 説明
<your-odps-endpoint> ご利用のリージョン向け MaxCompute エンドポイント(例:http://service.odps.aliyun.com/api
<your-project> ご利用の MaxCompute プロジェクト名

クイックリファレンス

Odps オブジェクト上の各コレクションクラスは、一連の SDK 操作に対応しています:

操作 SDK 呼び出し
すべてのテーブルを一覧表示 odps.tables()
特定のテーブルを取得 odps.tables().get("table_name")
すべてのインスタンスを一覧表示 odps.instances()
特定のインスタンスを取得 odps.instances().get("instance_id")
すべてのリソースを一覧表示 odps.resources()
特定のリソースを取得 odps.resources().get("resource_name")
すべての関数を一覧表示 odps.functions()
特定の関数を取得 odps.functions().get("function_name")
SQL ステートメントを実行 SQLTask.run(odps, sql)
プロジェクトの詳細を取得 odps.projects().get("project_name")

コアクラス

SQLTask

SQLTask は MaxCompute 上で SQL ステートメントを実行します。SQLTask.run() を呼び出してステートメントを送信すると、ステータスのポーリングや結果の取得に使用できる Instance オブジェクトが返されます。

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 RunSqlExample {
    private static final String ACCESS_ID  = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String ACCESS_KEY = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    private static final String ENDPOINT   = "http://service.odps.aliyun.com/api";
    private static final String PROJECT    = "<your-project>";

    public static void main(String[] args) {
        Account account = new AliyunAccount(ACCESS_ID, ACCESS_KEY);
        Odps odps = new Odps(account);
        odps.setEndpoint(ENDPOINT);
        odps.setDefaultProject(PROJECT);

        String sql = "select category from iris;";
        try {
            // SQL ステートメントを送信し、完了を待機
            Instance instance = SQLTask.run(odps, sql);
            instance.waitForSuccess();

            // 結果を取得して出力
            List<Record> records = SQLTask.getResult(instance);
            for (Record r : records) {
                System.out.println(r.get(0).toString());
            }
        } catch (OdpsException e) {
            e.printStackTrace();
        }
    }
}

使用上の注意点:

  • SQLTask.run() の呼び出しごとに、1 つの SQL ステートメントのみを送信してください。

  • テーブルをプログラムで作成するには、CREATE TABLE ステートメントを SQLTask.run() に渡します。Table クラスではテーブル作成はサポートされていません。CREATE TABLE の構文については、「テーブル操作」をご参照ください。

Instances および Instance

Instances は、プロジェクト内のすべてのインスタンスのコレクションです。Instance は単一のインスタンスを表し、ステータス、タイムイング、タスクのサマリー情報を公開します。

// すべてのインスタンスを反復処理
for (Instance i : odps.instances()) {
    // 各インスタンスを処理
}

// 特定のインスタンスを取得し、そのステータスを確認
Instance instance = odps.instances().get("instance_id");
Date startTime = instance.getStartTime();
Date endTime   = instance.getEndTime();

Status instanceStatus = instance.getStatus();
String statusStr;
if (instanceStatus == Status.TERMINATED) {
    statusStr = TaskStatus.Status.SUCCESS.toString();
    Map<String, TaskStatus> taskStatus = instance.getTaskStatus();
    for (Entry<String, TaskStatus> entry : taskStatus.entrySet()) {
        if (entry.getValue().getStatus() != TaskStatus.Status.SUCCESS) {
            statusStr = entry.getValue().getStatus().toString();
            break;
        }
    }
} else {
    statusStr = instanceStatus.toString();
}

// タスクサマリーを取得
TaskSummary summary = instance.getTaskSummary("task_name");
String summaryText  = summary.getSummaryText();

Projects および Project

Projects は、認証情報でアクセス可能なすべての MaxCompute プロジェクトのコレクションです。Project は単一のプロジェクトのメタデータを保持します。

// 特定のプロジェクトを取得
Project p = odps.projects().get("project_name");
p.reload();

Tables および Table

Tables は、デフォルトプロジェクト内のすべてのテーブルのコレクションです。Table を使用して、テーブルのスキーマおよびパーティションを確認できます。

// すべてのテーブルを反復処理
for (Table t : odps.tables()) {
    // 各テーブルを処理
}

// テーブルを取得し、そのカラムを反復処理
Table table = odps.tables().get("table_name");
for (Column c : table.getSchema().getColumns()) {
    String   name = c.getName();
    TypeInfo type = c.getTypeInfo();
}

// 特定のパーティションにアクセス
Table t = odps.tables().get("table_name");
t.reload();
Partition part = t.getPartition(new PartitionSpec("partition_col=partition_col_value"));
part.reload();

Resources および Resource

Resources は、プロジェクト内のすべてのリソースのコレクションです。リソースには、UDF や MapReduce ジョブで使用されるファイルおよびテーブル参照が含まれます。

// すべてのリソースを反復処理
for (Resource r : odps.resources()) {
    // 各リソースを処理
}

// リソースを取得し、そのタイプを確認
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_project";
String source      = "my_local_file.txt";
File file          = new File(source);
InputStream is     = new FileInputStream(file);

FileResource resource = new FileResource();
resource.setName(file.getName());
odps.resources().create(projectName, resource, is);

テーブルリソースの作成:

TableResource resource = new TableResource(tableName, tablePrj, partitionSpec);
resource.setName("table_resource_name");
odps.resources().update(projectName, resource);

Functions および Function

Functions は、プロジェクト内のすべての関数のコレクションです。Function を使用して、MaxCompute に登録された UDF を読み取ったり作成したりできます。

// すべての関数を反復処理
for (Function f : odps.functions()) {
    // 各関数を処理
}

// 関数を取得し、関連付けられたリソースを一覧表示
Function f = odps.functions().get("function_name");
List<Resource> resources = f.getResources();

関数の作成:

String classType = "com.aliyun.odps.mapred.open.example.WordCount";
ArrayList<String> resourceList = new ArrayList<>();
for (String r : "resource1:resource2".split(":")) {
    resourceList.add(r);
}

Function func = new Function();
func.setName("function_name");
func.setClassType(classType);
func.setResources(resourceList);
odps.functions().create(projectName, func);

MaxCompute Tunnel

Tunnel は Tunnel SDK を基盤としており、MaxCompute テーブルからの大量データのアップロードおよびダウンロードをサポートします。ビューはサポートされていません。

MapReduce

MaxCompute MapReduce でサポートされる SDK クラスおよびメソッドについては、「概要」をご参照ください。

次のステップ

  • MaxComputeでのPythonベースのデータ処理については、概要をご参照ください。

  • 完全な Java API リファレンスについては、javadoc.io の「ODPS SDK Core 0.45.1-public API」をご参照ください。

参照