Topik ini menjelaskan arsitektur sistem, fitur utama, dan skenario penggunaan MaxCompute Query Acceleration (MCQA).
MCQA (Query Acceleration 1.0) telah ditingkatkan menjadi MaxQA dan tidak lagi terbuka untuk pelanggan baru.
MaxCompute meluncurkan MaxQA (MaxCompute Query Accelerator 2.0) di situs China dan situs Internasional masing-masing pada 24 November 2025 (Senin) dan 27 November 2025 (Kamis) (UTC+8).
Untuk menggunakan percepatan kueri, lihat Ikhtisar MaxQA dan Percepatan Kueri MaxQA. Konten berikut hanya sebagai referensi bagi pengguna MCQA yang sudah ada.
Pendahuluan
MaxCompute MCQA menyediakan kemampuan berikut:
Mempercepat kueri pada dataset kecil hingga menengah, mengurangi waktu eksekusi dari hitungan menit menjadi detik. Sepenuhnya kompatibel dengan fitur kueri MaxCompute yang sudah ada.
Mendukung alat BI utama untuk kueri ad hoc dan analisis BI.
Menggunakan kolam sumber daya independen tanpa mengonsumsi sumber daya komputasi offline. Secara otomatis mengidentifikasi pekerjaan kueri untuk mengurangi tekanan antrean.
Menyimpan hasil kueri MCQA dalam cache temporary. Ketika kueri yang sama dijalankan kembali, MaxCompute mengembalikan hasil dari cache untuk eksekusi yang lebih cepat.
Alur kueri
Gambar berikut menunjukkan arsitektur pemrosesan kueri MaxCompute. Setelah kueri diterima, perutean pintar mengarahkannya ke salah satu dari tiga jalur: Percepatan Kueri (MCQA), eksekusi SQL standar, atau komputasi multi-engine.
Dalam arsitektur ini, MCQA menulis hasil kueri ke temporary cache. Ketika kueri yang sama dijalankan kembali, MaxCompute mengembalikan hasil dari cache untuk eksekusi yang lebih cepat. Mekanisme caching.
Skenario penggunaan
Skenario | Deskripsi | Karakteristik |
Ad hoc queries | Mengoptimalkan performa kueri pada dataset kecil hingga menengah (hingga ratusan GB) dengan latensi rendah untuk pengembangan dan analisis data yang cepat. |
|
Business Intelligence (BI) | Untuk gudang data enterprise di MaxCompute tempat ETL menghasilkan agregasi siap bisnis. Latensi rendah, konkurensi elastis, dan caching MCQA, dikombinasikan dengan partisi dan bucketing, mendukung pelaporan dan analitik konkuren secara hemat biaya. |
|
Large-scale data exploration | MCQA secara otomatis mengidentifikasi karakteristik kueri, menangani pekerjaan kecil dengan respons cepat, dan menskalakan sumber daya untuk pekerjaan yang lebih besar guna memenuhi berbagai kebutuhan analisis. |
|
Lingkup
Persyaratan versi:
MaxCompute client (odpscmd): v0.40.8 atau lebih baru.
ODPS-JDBC: v3.3.0 atau lebih baru.
ODPS-SDK: v0.40.8-public atau lebih baru.
Hanya pernyataan kueri data (SELECT) yang didukung. Jika pernyataan yang tidak didukung dikirimkan, client MaxCompute, JDBC, dan SDK dapat kembali ke mode offline standar. Alat lain tidak mendukung fallback. Setelah kueri kembali ke SQL standar, penagihan dilakukan berdasarkan model penagihan SQL asli.
Batas baris: Batas maksimum default adalah 1.000.000 baris. Tambahkan kata kunci LIMIT pada pernyataan SQL Anda untuk melebihi batas ini.
Pembatasan fitur:
Pembatasan
Deskripsi
Fitur
Didukung: MaxCompute edisi Standard dan bayar sesuai penggunaan.
Didukung: Penagihan langganan.
Tidak didukung: Edisi Developer. Diperlukan peningkatan ke edisi Standard.
Kueri
Maksimal 2.000 worker konkuren per pekerjaan.
Timeout default: 30 detik untuk pekerjaan yang dikirimkan melalui client, 20 detik untuk kueri ad hoc DataWorks. Setelah timeout, pekerjaan kembali ke mode kueri standar.
Hanya tabel dalam format penyimpanan ALIORC yang dapat di-cache di memori untuk akselerasi.
Konkurensi kueri
Mode langganan:
Tier gratis (tidak dialokasikan kelompok sumber daya interaktif MCQA):
Maksimal 5 pekerjaan konkuren per proyek per hari, hingga total 500 pekerjaan per proyek per hari. Pekerjaan yang melebihi batas ini secara otomatis kembali ke mode standar. Jika fallback dinonaktifkan, error berikut akan dikembalikan:
ODPS-1800001: Session exception - Failed to submit sub-query in session because:Prepaid project run outoffree query quota.Kelompok sumber daya interaktif MCQA:
Maksimal 120 pekerjaan MCQA konkuren per proyek. Pekerjaan yang melebihi batas ini kembali ke mode standar.
Minimum CU yang dicadangkan harus sama dengan maksimum CU yang dicadangkan untuk kelompok kuota sumber daya interaktif. Jika tidak, konfigurasi tidak berlaku.
Persyaratan jenis sumber daya interaktif (pekerjaan ditolak jika tidak terpenuhi):
Reserved CU [minCU]=Reserved CU [maxCU].CU yang dicadangkan harus ≥
50CU.
Setelah mengonfigurasi kelompok kuota sumber daya interaktif, semua proyek hanya mendukung pengiriman pekerjaan yang memenuhi syarat akselerasi ke kelompok kuota interaktif. Uji coba gratis MCQA tidak lagi tersedia.
Kelompok kuota sumber daya interaktif tidak dapat berfungsi sebagai kuota default untuk suatu proyek. Saat menggunakan MCQA, kelompok kuota interaktif berlaku untuk semua proyek tanpa perlu binding eksplisit.
Mode bayar sesuai penggunaan:
Maksimal 120 pekerjaan MCQA konkuren per proyek MaxCompute. Pekerjaan yang melebihi batas ini kembali ke mode standar.
Mekanisme caching
Untuk setiap kueri MCQA, MaxCompute membuat dataset temporary untuk menyimpan hasilnya dalam cache. Batas ukuran cache adalah 10 GB per dataset temporary.
Pemilik dataset temporary adalah pengguna yang menjalankan kueri dan menghasilkan hasil yang di-cache.
Dataset temporary tidak terlihat oleh pengguna dan tidak dapat dilihat.
MaxCompute secara otomatis memberikan akses kepada pengguna yang menjalankan kueri ke dataset temporary tersebut.
Untuk mengambil hasil dari cache, kueri dan konfigurasi konteks harus identik dengan kueri aslinya. MaxCompute menggunakan kembali hasil yang di-cache untuk kueri duplikat.
Penagihan cache
Hasil kueri yang di-cache tidak dikenai biaya penyimpanan atau komputasi, sehingga secara efektif mengurangi biaya penggunaan sumber daya.
Penghapusan cache
MaxCompute menghapus hasil yang di-cache ketika:
Pemanfaatan sumber daya proyek tinggi — MaxCompute dapat menghapus hasil yang di-cache lebih awal.
Tabel atau tampilan yang direferensikan berubah — hasil yang di-cache langsung tidak valid. Menjalankan kembali kueri yang sama tidak akan mengambil data dari cache.
Hasil yang di-cache telah kedaluwarsa.
Verifikasi cache
Logview 2.0 menyediakan informasi Logview pekerjaan kueri. Pada tab Job Details, Anda dapat memverifikasi bahwa hasil kueri telah ditulis ke cache:
Dalam tampilan Progress Chart, node RESULTCACHE menunjukkan R/W sebesar 0/0 baris, yang mengindikasikan hasil diambil dari cache.
Aktifkan MCQA untuk paket langganan
Prosedur
Ikuti langkah-langkah berikut untuk mengaktifkan MCQA pada instans MaxCompute dengan paket langganan:
Kuota MCQA untuk paket langganan menentukan konkurensi pemindaian, yang memengaruhi volume data yang dipindai. Sekitar 1 CU memindai 0,6 GB. Misalnya, 50 CU mendukung pemindaian sekitar 30 GB secara simultan, dengan maksimum 300 GB.
Login ke Konsol MaxCompute dan pilih wilayah di pojok kiri atas.
Pada panel navigasi kiri, pilih .
Pada halaman Quotas, klik Quota Configuration pada kolom Actions untuk kuota target.
Konfigurasi dasar kuota
Pada halaman Quota Configuration, pilih tab Basic Configurations dan klik Edit Basic Configurations.
Klik Add Level-2 Quota, atau konfigurasi parameter dasar untuk kuota level-2 yang sudah ada.
Tetapkan Quota Name kustom dan pilih Interactive untuk Type. Konfigurasi kuota.
Konfigurasi penskalaan kuota
Pada halaman Quota Configuration, pilih tab Scaling Configuration.
Pada tab Scaling Configuration, klik Add Configuration Plan, atau klik Edit pada kolom Actions untuk rencana yang sudah ada agar diperbarui.
Pada kotak dialog Add Configuration Plan atau Edit Configuration Plan, konfigurasi Reserved CUs [minCU,maxCU] untuk kelompok sumber daya Interactive (MaxQA/MCQA).
minCU harus sama dengan maxCU.
minCU harus ≥
50CU. Tetapkan ke0jika sumber daya interaktif tidak diperlukan.Kelompok kuota interaktif tidak mendukung CU cadangan elastis.
Klik OK untuk menyimpan konfigurasi kuota.
Pada tab Scaling Configuration, klik Apply Immediately pada kolom Actions untuk rencana target agar diterapkan segera. Anda juga dapat menggunakan rencana yang sudah ada saat mengonfigurasi Scheduled Scaling Management.
Konfigurasi rencana waktu.
Rencana waktu memungkinkan Anda menerapkan konfigurasi kuota berbeda pada waktu berbeda dalam sehari.
Kebijakan penjadwalan
Kelompok kuota interaktif dijadwalkan secara otomatis oleh server. Kebijakan penjadwalan bergantung pada jumlah kelompok kuota interaktif dalam tenant Anda:
Satu kelompok kuota interaktif: semua pekerjaan MCQA dalam tenant dijadwalkan ke kelompok ini.
Beberapa kelompok kuota interaktif: perutean otomatis memilih kelompok berdasarkan konfigurasi Anda. Menggunakan kuota untuk sumber daya komputasi.
Kebijakan fallback
Ketika pekerjaan MCQA kembali ke mode kueri standar karena pembatasan penggunaan, paket langganan menggunakan kuota yang terikat pada proyek saat ini.
Gunakan SDK (versi lebih tinggi dari v0.40.7) untuk menentukan kuota eksekusi fallback:
SQLExecutorBuilder builder = SQLExecutorBuilder.builder(); builder.quotaName("<OfflineQuotaName>");Gunakan parameter string koneksi JDBC
fallbackQuota=XXXuntuk menentukan kuota eksekusi fallback. Anda tidak dapat menentukan kelompok kuota interaktif sebagai target fallback; tindakan tersebut akan menyebabkan error.
Metode akses MCQA
MCQA mendukung metode akses berikut:
Metode 1: Aktifkan MCQA melalui client MaxCompute
Unduh client MaxCompute (odpscmd) terbaru.
Instal dan konfigurasikan client. Instal dan konfigurasikan odpscmd.
Edit file konfigurasi
odps_config.inidi direktoriconfpada path instalasi client. Tambahkan pengaturan berikut:enable_interactive_mode=true -- Enable MCQA interactive_auto_rerun=true -- Auto-fallback to standard mode on MCQA failureJalankan client MaxCompute dari direktori
bin(Linux:./bin/odpscmd, Windows:./bin/odpscmd.bat). Koneksi yang berhasil menghasilkan output:Aliyun ODPS Command Line Tool Version 0.35.1-public Connecting to http://service.cn-hangzhou.maxcompute.aliyun.com/api, project: Project timezone: Asia/Shanghai Connected!Setelah menjalankan kueri, jika Logview dalam hasil yang dikembalikan berisi informasi terkait MCQA, fitur tersebut telah diaktifkan. Pada tab Summary LogView, jika ditampilkan
Job run mode: session job 2.0, mode MCQA (interaktif) aktif.
Metode 2: Aktifkan MCQA melalui kueri ad hoc DataWorks atau pengembangan data
Kueri ad hoc DataWorks dan modul alur kerja manual memiliki MCQA yang diaktifkan secara default.
Jalankan kueri di Ad Hoc Query. Jika MCQA aktif, log eksekusi menampilkan
Congratulations! Your task was selected to run in MaxCompute query acceleration modedanMaxCompute query acceleration mode ran SQL successfully.Jalankan kueri di Manual Workflow. Log eksekusi menampilkan
Congratulations! Your task was selected to run in MaxCompute query acceleration modedanMaxCompute query acceleration mode ran SQL successfully.
Metode 3: Aktifkan MCQA melalui JDBC
Hubungkan ke MaxCompute melalui JDBC dan aktifkan MCQA. Referensi JDBC.
Unduh JDBC_JAR yang kompatibel dengan MCQA atau kode sumber yang dapat dikompilasi.
Konfigurasikan dependensi POM melalui Maven.
<dependency> <groupId>com.aliyun.odps</groupId> <artifactId>odps-jdbc</artifactId> <version>3.3.0</version> <classifier>jar-with-dependencies</classifier> </dependency>Buat program Java berdasarkan kode sumber. Sesuaikan dengan konfigurasi Anda. JDBC MaxCompute. Contoh:
// AccessKey akun Alibaba Cloud memiliki akses ke semua operasi API, yang menimbulkan risiko keamanan tinggi. // Kami sangat menyarankan Anda membuat dan menggunakan Pengguna RAM untuk akses API atau O&M rutin. Login ke konsol RAM untuk membuat Pengguna RAM. // Contoh ini menggunakan AccessKey dan AccessKeySecret yang disimpan dalam variabel lingkungan. // Anda juga dapat menyimpannya dalam file konfigurasi sesuai kebutuhan bisnis Anda. // Kami sangat menyarankan Anda tidak menyimpan AccessKey dan AccessKeySecret dalam kode Anda. Hal ini dapat menyebabkan kebocoran pasangan Kunci Akses. private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); // your_project_name adalah nama proyek tempat Anda ingin mengaktifkan MCQA. String conn = "jdbc:odps:http://service.<regionid>.maxcompute.aliyun.com/api?project=<YOUR_PROJECT_NAME>"&accessId&accessKey&charset=UTF-8&interactiveMode=true&alwaysFallback=false&autoSelectLimit=1000000000"; Statement stmt = conn.createStatement(); Connection conn = DriverManager.getConnection(conn, accessId, accessKey); Statement stmt = conn.createStatement(); String tableName = "testOdpsDriverTable"; stmt.execute("DROP TABLE IF EXISTS " + tableName); stmt.execute("CREATE TABLE " + tableName + " (key int, value string)");Anda dapat mengonfigurasi parameter berikut dalam string koneksi:
Parameter
Deskripsi
enableOdpsLogger
Mengaktifkan logging. Tetapkan ke True jika SLF4J tidak dikonfigurasi.
fallbackForUnknownError
Default: False. Tetapkan ke True untuk kembali ke mode offline saat terjadi error tak dikenal.
fallbackForResourceNotEnough
Default: False. Tetapkan ke True untuk kembali ke mode offline saat sumber daya tidak mencukupi.
fallbackForUpgrading
Default: False. Tetapkan ke True untuk kembali ke mode offline selama pemutakhiran.
fallbackForRunningTimeout
Default: False. Tetapkan ke True untuk kembali ke mode offline saat terjadi timeout eksekusi.
fallbackForUnsupportedFeature
Default: False. Tetapkan ke True untuk kembali ke mode offline untuk skenario MCQA yang tidak didukung.
alwaysFallback
Default: False. Tetapkan ke True untuk kembali ke mode offline dalam semua skenario di atas. Memerlukan JDBC 3.2.3 atau lebih baru.
Contoh penggunaan
Contoh 1: Gunakan MCQA dengan Tableau:
Tambahkan
interactiveMode=trueke URL server untuk mengaktifkan MCQA. Tambahkan jugaenableOdpsLogger=trueuntuk logging. Konfigurasi JDBC MaxCompute di Tableau.Contoh konfigurasi server lengkap:
http://service.cn-beijing.maxcompute.aliyun.com/api? project=****_beijing&interactiveMode=true&enableOdpsLogger=true&autoSelectLimit=1000000000"Untuk membatasi Tableau hanya pada tabel tertentu, tambahkan
table_list=table_name1, table_name2ke URL server (dipisahkan koma). Terlalu banyak tabel dapat memperlambat pemuatan Tableau. Untuk tabel yang sangat terpartisi, filter partisi atau gunakan SQL kustom. Contoh:http://service.cn-beijing.maxcompute.aliyun.com/api?project=****_beijing &interactiveMode=true&alwaysFallback=true&enableOdpsLogger=true&autoSelectLimit=1000000000" &table_list=orders,customersContoh 2: Gunakan MCQA dengan SQLWorkbench.
Setelah mengonfigurasi driver JDBC, ubah URL JDBC di pengaturan Profil. Konfigurasi JDBC MaxCompute di SQL Workbench/J.
Format URL:
jdbc:odps:<MaxCompute_endpoint>? project=<MaxCompute_project_name>&accessId=<AccessKey ID>&accessKey=<AccessKey Secret> &charset=UTF-8&interactiveMode=true&autoSelectLimit=1000000000"Deskripsi parameter:
Parameter
Deskripsi
MaxCompute_endpoint
Titik akhir wilayah tempat MaxCompute berjalan. Titik akhir.
MaxCompute_project_name
Nama proyek MaxCompute.
AccessKey ID
ID AccessKey dengan akses ke proyek yang ditentukan.
Peroleh dari halaman Manajemen AccessKey.
AccessKey Secret
Secret AccessKey untuk ID AccessKey tersebut.
Peroleh dari halaman Manajemen AccessKey.
charset=UTF-8
Format encoding karakter.
interactiveMode
Sakelar MCQA. Tetapkan
trueuntuk mengaktifkan MCQA.autoSelectLimit
Diperlukan saat data melebihi batas 1.000.000 baris.
Metode 4: Aktifkan MCQA melalui Java SDK
Ikhtisar Java SDK. Konfigurasikan dependensi POM melalui Maven:
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-sdk-core</artifactId>
<version>3.3.0</version>
</dependency>import com.aliyun.odps.Odps;
import com.aliyun.odps.OdpsException;
import com.aliyun.odps.OdpsType;
import com.aliyun.odps.account.Account;
import com.aliyun.odps.account.AliyunAccount;
import com.aliyun.odps.data.Record;
import com.aliyun.odps.data.ResultSet;
import com.aliyun.odps.sqa.*;
import java.io.IOException;
import java.util.*;
public class SQLExecutorExample {
public static void SimpleExample() {
// Setel informasi akun dan proyek.
// AccessKey akun Alibaba Cloud memiliki akses ke semua operasi API, yang menimbulkan risiko keamanan tinggi.
// Kami sangat menyarankan Anda membuat dan menggunakan Pengguna RAM untuk akses API atau O&M rutin. Login ke konsol RAM untuk membuat Pengguna RAM.
// Contoh ini menggunakan AccessKey dan AccessKeySecret yang disimpan dalam variabel lingkungan. Anda juga dapat menyimpannya dalam file konfigurasi sesuai kebutuhan bisnis Anda.
// Kami sangat menyarankan Anda tidak menyimpan AccessKey dan AccessKeySecret dalam kode Anda. Hal ini dapat menyebabkan kebocoran pasangan Kunci Akses.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
odps.setDefaultProject("<YOUR_PROJECT_NAME>");
odps.setEndpoint("http://service.<regionid>.maxcompute.aliyun.com/api");
// Siapkan untuk membangun SQLExecutor.
SQLExecutorBuilder builder = SQLExecutorBuilder.builder();
SQLExecutor sqlExecutor = null;
try {
// jalankan dalam mode offline atau jalankan dalam mode interaktif
if (false) {
// Buat Executor yang menjalankan SQL offline secara default.
sqlExecutor = builder.odps(odps).executeMode(ExecuteMode.OFFLINE).build();
} else {
// Buat Executor yang menjalankan SQL dalam mode percepatan kueri secara default dan secara otomatis kembali ke mode offline saat gagal.
sqlExecutor = builder.odps(odps).executeMode(ExecuteMode.INTERACTIVE).fallbackPolicy(FallbackPolicy.alwaysFallbackPolicy()).build();
}
// Kirim pengaturan kueri kustom jika diperlukan.
Map<String, String> queryHint = new HashMap<>();
queryHint.put("odps.sql.mapper.split.size", "128");
// Kirim pekerjaan kueri. Hint didukung.
sqlExecutor.run("select count(1) from test_table;", queryHint);
// Daftar metode umum untuk mengambil informasi.
// UUID
System.out.println("ExecutorId:" + sqlExecutor.getId());
// Logview dari pekerjaan kueri saat ini.
System.out.println("Logview:" + sqlExecutor.getLogView());
// Objek Instans dari pekerjaan kueri saat ini (dalam mode Interaktif, beberapa pekerjaan kueri dapat berbagi Instans yang sama).
System.out.println("InstanceId:" + sqlExecutor.getInstance().getId());
// Kemajuan tahap dari pekerjaan kueri saat ini (progress bar konsol).
System.out.println("QueryStageProgress:" + sqlExecutor.getProgress());
// Log perubahan status eksekusi dari pekerjaan kueri saat ini, seperti informasi fallback.
System.out.println("QueryExecutionLog:" + sqlExecutor.getExecutionLog());
// Dua metode disediakan untuk mengambil hasil.
if(false) {
// Ambil semua hasil kueri sekaligus. Metode sinkron ini dapat memblokir thread saat ini hingga kueri berhasil atau gagal.
// Membaca semua data hasil ke memori sekaligus. Tidak disarankan untuk dataset besar karena potensi masalah memori.
List<Record> records = sqlExecutor.getResult();
printRecords(records);
} else {
// Ambil iterator ResultSet untuk hasil kueri. Metode sinkron ini dapat memblokir thread saat ini hingga kueri berhasil atau gagal.
// Disarankan untuk set hasil besar. Membaca hasil kueri secara batch.
ResultSet resultSet = sqlExecutor.getResultSet();
while (resultSet.hasNext()) {
printRecord(resultSet.next());
}
}
// jalankan kueri lain
sqlExecutor.run("select * from test_table;", new HashMap<>());
if(false) {
// Ambil semua hasil kueri sekaligus. Metode sinkron ini dapat memblokir thread saat ini hingga kueri berhasil atau gagal.
// Membaca semua data hasil ke memori sekaligus. Tidak disarankan untuk dataset besar karena potensi masalah memori.
List<Record> records = sqlExecutor.getResult();
printRecords(records);
} else {
// Ambil iterator ResultSet untuk hasil kueri. Metode sinkron ini dapat memblokir thread saat ini hingga kueri berhasil atau gagal.
// Disarankan untuk set hasil besar. Membaca hasil kueri secara batch.
ResultSet resultSet = sqlExecutor.getResultSet();
while (resultSet.hasNext()) {
printRecord(resultSet.next());
}
}
} catch (OdpsException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (sqlExecutor != null) {
// Tutup Executor untuk melepaskan sumber daya.
sqlExecutor.close();
}
}
}
// SQLExecutor dapat digunakan kembali dengan mode pool
public static void ExampleWithPool() {
// Jalankan kueri menggunakan kolam koneksi.
// AccessKey akun Alibaba Cloud memiliki akses ke semua operasi API, yang menimbulkan risiko keamanan tinggi.
// Kami sangat menyarankan Anda membuat dan menggunakan Pengguna RAM untuk akses API atau O&M rutin. Login ke konsol RAM untuk membuat Pengguna RAM.
// Contoh ini menggunakan AccessKey dan AccessKeySecret yang disimpan dalam variabel lingkungan. Anda juga dapat menyimpannya dalam file konfigurasi sesuai kebutuhan bisnis Anda.
// Kami sangat menyarankan Anda tidak menyimpan AccessKey dan AccessKeySecret dalam kode Anda. Hal ini dapat menyebabkan kebocoran pasangan Kunci Akses.
Account account = new AliyunAccount(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
Odps odps = new Odps(account);
odps.setDefaultProject("your_project_name");
odps.setEndpoint("http://service.<regionid>.maxcompute.aliyun.com/api");
// Siapkan kolam koneksi dan atur ukuran pool serta mode eksekusi default.
SQLExecutorPool sqlExecutorPool = null;
SQLExecutor sqlExecutor = null;
try {
// Siapkan kolam koneksi dan atur ukuran pool serta mode eksekusi default.
SQLExecutorPoolBuilder builder = SQLExecutorPoolBuilder.builder();
builder.odps(odps)
.initPoolSize(1) // jumlah executor awal pool
.maxPoolSize(5) // executor maksimum dalam pool
.executeMode(ExecuteMode.INTERACTIVE); // jalankan dalam mode interaktif
sqlExecutorPool = builder.build();
// Dapatkan Executor dari kolam koneksi. Jika tidak tersedia, executor baru dibuat dalam batas maksimum.
sqlExecutor = sqlExecutorPool.getExecutor();
// Penggunaan Executor sama seperti pada contoh sebelumnya.
sqlExecutor.run("select count(1) from test_table;", new HashMap<>());
System.out.println("InstanceId:" + sqlExecutor.getId());
System.out.println("Logview:" + sqlExecutor.getLogView());
List<Record> records = sqlExecutor.getResult();
printRecords(records);
} catch (OdpsException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
sqlExecutor.close();
}
sqlExecutorPool.close();
}
private static void printRecord(Record record) {
for (int k = 0; k < record.getColumnCount(); k++) {
if (k != 0) {
System.out.print("\t");
}
if (record.getColumns()[k].getType().equals(OdpsType.STRING)) {
System.out.print(record.getString(k));
} else if (record.getColumns()[k].getType().equals(OdpsType.BIGINT)) {
System.out.print(record.getBigint(k));
} else {
System.out.print(record.get(k));
}
}
}
private static void printRecords(List<Record> records) {
for (Record record : records) {
printRecord(record);
System.out.println();
}
}
public static void main(String args[]) {
SimpleExample();
ExampleWithPool();
}
}Metode 5: Aktifkan MCQA melalui PyODPS dengan SQLAlchemy atau alat lain yang kompatibel dengan SQLAlchemy
PyODPS mengintegrasikan SQLAlchemy untuk mengkueri data MaxCompute. Tentukan parameter berikut dalam string koneksi untuk mengaktifkan MCQA:
interactive_mode=true: Wajib. Sakelar utama MCQA.reuse_odps=true: Opsional. Memaksa penggunaan kembali koneksi. Meningkatkan performa dengan beberapa alat pihak ketiga (misalnya, Apache Superset).
Konfigurasikan fallback_policy=<policy1>,<policy2>,... dalam string koneksi untuk mengontrol perilaku fallback, mirip dengan parameter JDBC.
generic: Default: False. Kembali ke mode offline saat terjadi error tak dikenal.noresource: Default: False. Kembali ke mode offline saat sumber daya tidak mencukupi.upgrading: Default: False. Kembali ke mode offline selama pemutakhiran.timeout: Default: False. Kembali ke mode offline saat terjadi timeout eksekusi.unsupported: Default: False. Kembali ke mode offline untuk skenario MCQA yang tidak didukung.default: Setara dengan menentukan unsupported, upgrading, noresource, dan timeout. Ini adalah kebijakan default jikafallback_policytidak ditentukan.all: Default: False. Kembali ke mode offline dalam semua skenario di atas.
Contoh penggunaan
String koneksi dengan MCQA diaktifkan, penggunaan kembali koneksi dipaksa, dan fallback untuk skenario unsupported/upgrading/noresource:
odps://<access_id>:<ACCESS_KEY>@<project>/?endpoint=<endpoint>&interactive_mode=true&reuse_odps=true&fallback_policy=unsupported,upgrading,noresourceFAQ
Q1: Saat menggunakan JDBC untuk terhubung ke MaxCompute dan mengeksekusi tugas SQL dengan sumber daya langganan, terjadi error ODPS-1800001:
sError:com.aliyun.odps.OdpsException: ODPS-1800001: Session exception - Failed to submit sub-query in session because:Prepaid project run out of free query quota.Penyebab kemungkinan:
Selama pratinjau publik MCQA, pengguna paket langganan dapat mencoba MCQA secara gratis. Uji coba gratis memungkinkan maksimal 5 pekerjaan MCQA konkuren per proyek dan hingga 500 pekerjaan akselerasi gratis per proyek per hari. Melebihi 500 pekerjaan memicu error ini.
Solusi:
Tetapkan
alwaysFallback=truedalam konfigurasi MCQA JDBC. Pekerjaan dalam batas 500 menggunakan MCQA; pekerjaan yang melebihi batas tersebut kembali ke mode offline. Metode akses MCQA.
Q2: Waktu respons permintaan PyODPS lebih lama daripada DataWorks.
Kemungkinan penyebab:
Menggunakan metode
wait_for_xxx, yang menambah latensi.Interval polling panjang.
Solusi:
Untuk permintaan yang berjalan cepat, lewati metode
wait_for_xxxdan gunakan Tunnel untuk mengunduh hasil secara langsung.Kurangi interval polling:
instance.wait_for_success(interval=0.1). Contoh:from odps import ODPS, errors max_retry_times = 3 def run_sql(odps, stmt): retry = 0 while retry < max_retry_times: try: inst = odps.run_sql_interactive(stmt) print(inst.get_logview_address()) inst.wait_for_success(interval=0.1) records = [] for each_record in inst.open_reader(tunnel=True): records.append(each_record) return records except errors.ODPSError as e: retry = retry + 1 print("Error: " + str(e) + " retry: " + str(retry) + "/" + str(max_retry_times)) if retry >= max_retry_times: raise e odps = ODPS(...) run_sql(odps, 'SELECT 1')
Q3: Bagaimana cara menggunakan Logview untuk troubleshooting error Java SDK?
Solusi: Java SDK MaxCompute menyediakan antarmuka Logview. Gunakan kode berikut untuk mengambil log:
String logview = sqlExecutor.getLogView();Q4: Bagaimana cara mendapatkan URL Logview MaxCompute melalui JDBC?
Solusi: MaxCompute JDBC Driver dibangun di atas Java SDK MaxCompute. Saat mengeksekusi SQL melalui JDBC, URL Logview dihasilkan untuk melacak status dan kemajuan tugas. Konfigurasikan output log (properties.log4j) untuk menangkap URL tersebut. Secara default, URL tersebut dicetak ke stdout.