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.
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 TABLEkeSQLTask.run(). KelasTabletidak mendukung pembuatan tabel. Untuk sintaksisCREATE 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
-
Untuk pemrosesan data berbasis Python di MaxCompute, lihat Ikhtisar.
-
Untuk referensi API Java lengkap, lihat ODPS SDK Core 0.45.1-public API di javadoc.io.