Java SDK adalah serangkaian antarmuka pemrograman Java yang disediakan oleh MaxCompute. Melalui antarmuka ini, Anda dapat menggunakan kode Java untuk mengoperasikan dan mengelola layanan MaxCompute seperti mengakses proyek, memanipulasi tabel data, transfer data, serta manajemen fungsi. Topik ini menjelaskan paket-paket yang disediakan oleh MaxCompute SDK untuk Java dan kelas inti dari SDK tersebut, termasuk instance, resource, tabel, dan fungsi.
Jika Anda menggunakan MaxCompute SDK untuk Java untuk mengakses layanan komputasi dan penyimpanan yang disediakan oleh MaxCompute, biaya akan dikenakan dengan cara yang sama seperti ketika Anda mengakses layanan tersebut melalui metode lain. Untuk informasi lebih lanjut, lihat .
Penetapan harga penyimpanan (bayar sesuai penggunaan), Penetapan harga komputasi (bayar sesuai penggunaan), dan Penetapan harga unduhan (bayar sesuai penggunaan).
Informasi latar belakang
Topik ini menjelaskan kelas inti dari MaxCompute SDK untuk Java. Untuk informasi lebih lanjut tentang SDK, lihat ODPS SDK Core 0.45.1-API publik.
Anda dapat menggunakan Maven untuk mengonfigurasi versi SDK yang ingin digunakan. Sebagai contoh, untuk menentukan versi odps-sdk-core, tambahkan dependensi Maven berikut:
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-core</artifactId>
<version>X.X.X-public</version>
</dependency>Hanya SDK versi 0.27.2-public atau yang lebih baru yang mendukung tipe data baru yang diperkenalkan dalam edisi tipe data MaxCompute V2.0.
Anda dapat memperoleh versi terbaru SDK dengan mencari odps-sdk-core di search.maven.org.
Tabel berikut menjelaskan paket-paket yang disediakan oleh MaxCompute SDK untuk Java.
Nama Paket | Deskripsi |
odps-sdk-core | Menyediakan fitur dasar MaxCompute, seperti fitur yang memungkinkan Anda mengelola tabel dan proyek. Anda juga dapat menggunakan paket ini untuk mengakses layanan Tunnel. |
odps-sdk-commons | Menyediakan utilitas umum. |
odps-sdk-udf | Menyediakan fitur fungsi yang ditentukan pengguna (UDF). |
odps-sdk-mapred | Menyediakan fitur MapReduce. |
odps-sdk-graph | Menyediakan Graph SDK untuk Java. Anda dapat memperoleh SDK ini dengan mencari odps-sdk-graph. |
AliyunAccount
Anda dapat memanggil API ini untuk mendapatkan akun Alibaba Cloud Anda. Konstruktor kelas AliyunAccount menggunakan ID AccessKey dan Rahasia AccessKey sebagai parameter input. ID AccessKey dan Rahasia AccessKey membentuk pasangan AccessKey yang digunakan untuk mengotentikasi pengguna Alibaba Cloud. API ini juga digunakan untuk menginisialisasi MaxCompute.
ODPS
Kelas Odps adalah titik masuk MaxCompute SDK untuk Java. Kelas Odps memungkinkan Anda mengakses semua jenis objek di MaxCompute, termasuk proyek, tabel, resource, fungsi, dan instance.
Anda dapat melewatkan objek AliyunAccount ke konstruktor kelas Odps untuk membuat objek Odps. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol Resource Access Management (RAM).
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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 dibangun di atas Tunnel SDK. Ini memungkinkan Anda mengunggah data ke atau mengunduh data dari tabel MaxCompute (tidak termasuk tampilan) melalui Tunnel.
MapReduce
Untuk informasi lebih lanjut tentang SDK yang didukung oleh MapReduce, lihat Ikhtisar.
Projects
Kelas Projects mendefinisikan kumpulan semua proyek di MaxCompute. Setiap proyek MaxCompute adalah elemen dalam kumpulan tersebut. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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
Kelas Project mendefinisikan detail proyek. Anda dapat memperoleh proyek tertentu dengan memanggil metode get dari kelas Projects.
SQLTask
Kelas SQLTask memungkinkan Anda menjalankan dan memproses pernyataan SQL di MaxCompute. Anda dapat mengeksekusi pernyataan SQL dengan memanggil metode run dari kelas SQLTask.
Metode run mengembalikan objek Instance. Anda dapat memperoleh status dan hasil eksekusi pernyataan SQL dari objek Instance. Kode berikut menunjukkan contohnya:
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 {
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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();
}
}
}Anda hanya dapat mengirimkan dan mengeksekusi satu pernyataan SQL pada satu waktu.
Untuk membuat tabel menggunakan MaxCompute SDK untuk Java, Anda harus menggunakan kelas SQLTask alih-alih kelas Table. Anda perlu meneruskan pernyataan CREATE TABLE ke SQLTask sebelum menggunakan objek SQLTask untuk mengeksekusi pernyataan CREATE TABLE. Untuk informasi lebih lanjut tentang pernyataan CREATE TABLE, lihat Operasi tabel.
Instances
Kelas Instances mendefinisikan kumpulan semua instance di MaxCompute. Setiap instance adalah elemen dalam kumpulan tersebut. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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
Kelas Instance mendefinisikan detail instance. Anda dapat memperoleh instance tertentu dengan memanggil metode get dari kelas Instances. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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
Kelas Tables mendefinisikan kumpulan semua tabel di MaxCompute. Setiap tabel adalah elemen dalam kumpulan tersebut. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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
Kelas Table mendefinisikan detail tabel. Anda dapat memperoleh tabel tertentu dengan memanggil metode get dari kelas Tables. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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();
}Kode berikut menunjukkan cara memperoleh data dalam partisi tabel:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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
Kelas Resources mendefinisikan kumpulan semua resource di MaxCompute. Setiap resource adalah elemen dalam kumpulan tersebut. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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
Kelas Resource mendefinisikan detail setiap resource. Anda dapat memperoleh resource tertentu dengan memanggil metode get dari kelas Resources. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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()
+ ")";
}
....
}Kode berikut menunjukkan cara membuat resource file:
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);Kode berikut menunjukkan cara membuat resource tabel:
TableResource resource = new TableResource(tableName, tablePrj, partitionSpec);
//resource.setName(INVALID_USER_TABLE);
resource.setName("table_resource_name");
odps.resources().update(projectName, resource);Functions
Kelas Functions mendefinisikan kumpulan semua fungsi di MaxCompute. Setiap fungsi adalah elemen dalam kumpulan tersebut. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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
Kelas Function mendefinisikan detail fungsi. Anda dapat memperoleh fungsi tertentu dengan memanggil metode get dari kelas Functions. Kode berikut menunjukkan contohnya:
// Pasangan AccessKey akun Alibaba Cloud memiliki izin untuk semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda membuat dan menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin. Untuk membuat pengguna RAM, masuk ke Konsol RAM.
// Dalam contoh ini, ID AccessKey dan Rahasia AccessKey dikonfigurasi sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda di file konfigurasi berdasarkan kebutuhan bisnis Anda.
// Kami merekomendasikan agar Anda tidak secara langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode untuk mencegah kebocoran pasangan 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(); Kode berikut menunjukkan cara membuat fungsi:
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); Referensi
Jika Anda ingin menggunakan Python untuk berinteraksi dengan dan memproses data di MaxCompute, lihat Ikhtisar.