All Products
Search
Document Center

MaxCompute:Ikhtisar Java SDK

Last Updated:Mar 27, 2026

MaxCompute SDK untuk Java menyediakan serangkaian antarmuka Java untuk mengelola dan berinteraksi dengan MaxCompute secara terprogram. SDK ini memungkinkan Anda mengelola proyek, menjalankan pernyataan SQL, memanipulasi tabel, mentransfer data melalui Tunnel, serta mengelola resource dan function.

Biaya penggunaan layanan komputasi dan penyimpanan MaxCompute melalui SDK sama dengan biaya saat mengaksesnya melalui metode lain. Untuk detail harga, lihat Harga penyimpanan (pay-as-you-go), Harga komputasi (pay-as-you-go), dan Harga unduh (pay-as-you-go).

Paket SDK

MaxCompute SDK untuk Java didistribusikan sebagai serangkaian paket Maven.

Topik ini menjelaskan antarmuka inti umum MaxCompute. Untuk informasi lebih lanjut, lihat SDK Java Doc.

Untuk informasi lebih lanjut, lihat Biaya penyimpanan (pay-as-you-go), Biaya komputasi (pay-as-you-go), dan Biaya unduh (pay-as-you-go).

Package Description
odps-sdk-core Fitur inti: kelola tabel dan proyek, akses layanan Tunnel
odps-sdk-commons Utilitas umum
odps-sdk-udf Fitur user-defined function (UDF)
odps-sdk-mapred Fitur MapReduce
odps-sdk-graph Graph SDK untuk Java

Untuk referensi API lengkap, lihat ODPS SDK Core 0.45.1-public API.

Tambahkan dependensi Maven

Tambahkan odps-sdk-core ke file pom.xml Anda:

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

Untuk menemukan versi terbaru, cari odps-sdk-core di search.maven.org.

Diperlukan SDK versi 0.27.2-public atau yang lebih baru untuk menggunakan tipe data baru yang diperkenalkan di MaxCompute V2.0.

Inisialisasi client

Objek Odps merupakan titik masuk untuk semua operasi SDK dan menyediakan akses ke seluruh resource MaxCompute, termasuk proyek, tabel, instans, resource, dan function.

Catatan

MaxCompute sebelumnya dikenal sebagai ODPS. Oleh karena itu, kelas entri masih bernama ODPS pada versi SDK saat ini.

Buat objek Odps dengan meneruskan objek AliyunAccount ke konstruktor-nya. AliyunAccount menerima ID AccessKey dan rahasia AccessKey, yang bersama-sama membentuk pasangan kredensial AccessKey untuk otentikasi.

// Simpan kredensial AccessKey Anda sebagai variabel lingkungan, jangan
// melakukan hardcoding. Menggunakan pasangan AccessKey dari Akun Alibaba Cloud memberikan
// akses API penuh — buat dan gunakan RAM user untuk operasi rutin.
// Untuk membuat RAM user, lihat konsol 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>");

Ganti placeholder berikut dengan nilai aktual:

Placeholder Description
<your-odps-endpoint> Titik akhir MaxCompute untuk wilayah Anda, contohnya http://service.odps.aliyun.com/api
<your-project> Nama proyek MaxCompute Anda

Referensi cepat

Setiap kelas koleksi pada objek Odps memetakan ke sekumpulan operasi SDK:

Operation SDK call
Daftar semua tabel odps.tables()
Dapatkan tabel tertentu odps.tables().get("table_name")
Daftar semua instans odps.instances()
Dapatkan instans tertentu odps.instances().get("instance_id")
Daftar semua resource odps.resources()
Dapatkan resource tertentu odps.resources().get("resource_name")
Daftar semua fungsi odps.functions()
Dapatkan fungsi tertentu odps.functions().get("function_name")
Jalankan pernyataan SQL SQLTask.run(odps, sql)
Dapatkan detail proyek odps.projects().get("project_name")

Kelas inti

SQLTask

SQLTask menjalankan pernyataan SQL di MaxCompute. Panggil SQLTask.run() untuk mengirimkan pernyataan tersebut—metode ini mengembalikan objek Instance yang dapat digunakan untuk memeriksa status dan mengambil hasil.

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 {
            // Kirim pernyataan SQL dan tunggu hingga selesai
            Instance instance = SQLTask.run(odps, sql);
            instance.waitForSuccess();

            // Ambil dan cetak hasil
            List<Record> records = SQLTask.getResult(instance);
            for (Record r : records) {
                System.out.println(r.get(0).toString());
            }
        } catch (OdpsException e) {
            e.printStackTrace();
        }
    }
}

Catatan penggunaan:

  • Kirim hanya satu pernyataan SQL per pemanggilan SQLTask.run().

  • Untuk membuat tabel secara terprogram, teruskan pernyataan CREATE TABLE ke SQLTask.run(). Kelas Table tidak mendukung pembuatan tabel. Untuk sintaksis CREATE TABLE, lihat Operasi tabel.

Instances dan Instance

Instances adalah koleksi semua instans dalam proyek. Instance merepresentasikan satu instans dan menyediakan informasi status, waktu eksekusi, serta ringkasan tugas.

// Iterasi semua instans
for (Instance i : odps.instances()) {
    // proses setiap instans
}

// Dapatkan instans tertentu dan periksa statusnya
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();
}

// Dapatkan ringkasan tugas
TaskSummary summary = instance.getTaskSummary("task_name");
String summaryText  = summary.getSummaryText();

Projects dan Project

Projects adalah koleksi semua proyek MaxCompute yang dapat diakses dengan kredensial Anda. Project menyimpan metadata untuk satu proyek.

// Dapatkan proyek tertentu
Project p = odps.projects().get("project_name");
p.reload();

Tables dan Table

Tables adalah koleksi semua tabel dalam proyek default. Gunakan Table untuk memeriksa skema dan partisi tabel.

// Iterasi semua tabel
for (Table t : odps.tables()) {
    // proses setiap tabel
}

// Dapatkan tabel dan iterasi kolom-kolomnya
Table table = odps.tables().get("table_name");
for (Column c : table.getSchema().getColumns()) {
    String   name = c.getName();
    TypeInfo type = c.getTypeInfo();
}

// Akses partisi tertentu
Table t = odps.tables().get("table_name");
t.reload();
Partition part = t.getPartition(new PartitionSpec("partition_col=partition_col_value"));
part.reload();

Resources dan Resource

Resources adalah koleksi semua resource dalam proyek. Resource mencakup file dan referensi tabel yang digunakan oleh UDF dan pekerjaan MapReduce.

// Iterasi semua resource
for (Resource r : odps.resources()) {
    // proses setiap resource
}

// Dapatkan resource dan periksa tipenya
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() + ")";
    }
}

Buat sumber daya file:

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);

Buat resource tabel:

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

Fungsi-fungsi dan Fungsi

Functions adalah koleksi semua function dalam proyek. Gunakan Function untuk membaca atau membuat UDF yang terdaftar di MaxCompute.

// Iterasi semua function
for (Function f : odps.functions()) {
    // proses setiap function
}

// Dapatkan function dan daftar resource terkaitnya
Function f = odps.functions().get("function_name");
List<Resource> resources = f.getResources();

Buat function:

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 dibangun di atas Tunnel SDK dan mendukung unggah dan unduh data massal dari tabel MaxCompute. View tidak didukung.

MapReduce

Untuk kelas dan metode SDK yang didukung oleh MaxCompute MapReduce, lihat Ikhtisar.

Langkah berikutnya

Referensi