Topik ini menjelaskan cara mengunduh paket JAR driver JDBC MaxCompute dan menyambungkannya ke MaxCompute. Topik ini juga mencakup kode contoh.
Catatan Penggunaan
Untuk mengeksekusi pernyataan SQL dan mendapatkan hasil eksekusi menggunakan driver JDBC MaxCompute, Anda harus memenuhi persyaratan berikut:
Anda adalah anggota dari sebuah Proyek.
Anda memiliki izin CREATE INSTANCE pada Proyek tersebut.
Anda memiliki izin SELECT dan DOWNLOAD pada tabel yang ingin digunakan.
CatatanJika menggunakan MaxCompute JDBC V1.9 atau lebih lama, tabel sementara akan dibuat otomatis untuk setiap kueri. Anda dapat menggunakan perintah Tunnel untuk mendapatkan hasil kueri dari tabel sementara. Untuk versi ini, Anda memerlukan izin CREATE TABLE.
Jika menggunakan MaxCompute JDBC V2.2 atau lebih baru, tidak ada tabel sementara yang dibuat secara otomatis untuk setiap kueri. Anda dapat memanggil antarmuka InstanceTunnel untuk mendapatkan hasil kueri tanpa memerlukan izin CREATE TABLE.
Untuk informasi lebih lanjut tentang izin MaxCompute, lihat Izin MaxCompute.
MaxCompute menyediakan fitur perlindungan data. Jika fitur perlindungan data diaktifkan untuk sebuah Proyek, Anda tidak dapat memindahkan data keluar dari Proyek tersebut. Jika menggunakan MaxCompute JDBC versi lebih lama dari V2.4, tidak ada
set hasilyang dapat diperoleh. Jika menggunakan MaxCompute JDBC V2.4 atau lebih baru, jumlah baris hasil yang diperoleh tidak boleh melebihi nilai parameter READ_TABLE_MAX_ROW. Untuk informasi lebih lanjut tentang parameter ini, lihat Operasi Proyek. Untuk detail lebih lanjut tentang fitur perlindungan data, lihat Perlindungan Data Proyek.Edisi tipe data MaxCompute V2.0 mendukung lebih banyak tipe data seperti TINYINT, SMALLINT, DATETIME, TIMESTAMP, ARRAY, MAP, dan STRUCT. Untuk menggunakan tipe data baru ini, Anda harus menjalankan perintah berikut untuk mengaktifkan edisi tipe data MaxCompute V2.0. Untuk informasi lebih lanjut, lihat Edisi Tipe Data.
set odps.sql.type.system.odps2=true
Unduh paket JAR driver JDBC MaxCompute
Anda dapat mengunduh paket JAR dari berbagai versi driver JDBC MaxCompute melalui OSS, GitHub, atau Maven. Kami merekomendasikan untuk mengunduh paket JAR yang namanya mencakup jar-with-dependencies.
Kode berikut menunjukkan dependensi dalam file Model Objek Proyek (POM) driver JDBC MaxCompute yang diunduh dari Maven:
<dependency>
<groupId>com.aliyun.odps</groupId>
<artifactId>odps-jdbc</artifactId>
<version>3.8.6</version>
<classifier>jar-with-dependencies</classifier>
</dependency>Driver JDBC MaxCompute adalah proyek kode sumber terbuka bernama aliyun-odps-jdbc.
Anda dipersilakan untuk berpartisipasi dalam pengembangan dan peningkatan driver JDBC MaxCompute. Anda dapat melaporkan masalah pada tab Issues dan mengoptimalkan kode sumber pada tab Pull requests. Operasi Anda pada tab Issues dan Pull requests harus mengikuti persyaratan template untuk proyek sumber terbuka.
Parameter JDBC
Anda dapat mengonfigurasi parameter URL dan properti untuk menggunakan driver JDBC. Parameter properti memiliki prioritas lebih tinggi daripada parameter URL.
Jika parameter URL adalah odps_config=config_file, config_file dibaca sebagai parameter properti.
Parameter dasar
Kunci URL
Kunci Properti
Diperlukan
Deskripsi
project
project_name
Ya
Nama proyek MaxCompute.
accessId
access_id
Ya
ID AccessKey akun Alibaba Cloud Anda.
Anda dapat memperoleh ID AccessKey dari halaman Pasangan AccessKey.
accessKey
access_key
Ya
Rahasia AccessKey akun Alibaba Cloud Anda.
Anda dapat memperoleh rahasia AccessKey pada halaman Pasangan AccessKey.
logview
logview_host
Tidak
URL LogView MaxCompute. Atur nilainya menjadi
http://logview.odps.aliyun.com.tunnelEndpoint
tunnel_endpoint
Tidak
Titik akhir MaxCompute Tunnel.
Untuk informasi lebih lanjut tentang titik akhir Tunnel yang sesuai dengan berbagai wilayah dan jenis koneksi jaringan, lihat Titik Akhir.
Parameter konfigurasi log
Kunci URL
Kunci Properti
Diperlukan
Deskripsi
enableOdpsLogger
enable_odps_logger
Tidak
Menentukan apakah akan mengaktifkan logger JDBC MaxCompute. Nilai valid:
False: Logger JDBC MaxCompute dinonaktifkan. Log tidak dicatat dalam file. Ini adalah nilai default.
True: Logger JDBC MaxCompute diaktifkan. Log dicatat dalam file
jdbc.logdari direktori tempat paket JAR driver JDBC MaxCompute disimpan.
logConfFile
log_conf_file
Tidak
File konfigurasi untuk Simple Logging Facade for Java (SLF4J). Anda dapat menentukan file konfigurasi ini untuk mengonfigurasi output log secara fleksibel. Misalnya, Anda dapat menentukan file output dan mengonfigurasi parameter logLevel untuk menentukan level log. Untuk menentukan file konfigurasi ini, Anda dapat menambahkan dependensi berikut ke file
pom.xmldalam proyek:<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>Untuk informasi lebih lanjut tentang konfigurasi, lihat Contoh.
logLevel
log_level
Tidak
Level log. Nilai default: INFO.
Parameter lainnya
Kunci URL
Kunci Properti
Diperlukan
Deskripsi
stsToken
sts_token
Tidak
Token STS Alibaba Cloud.
charset
charset
Tidak
Set karakter untuk input dan output. Nilai default: UTF-8.
useProjectTimeZone
use_project_time_zone
Tidak
Menentukan apakah akan menggunakan zona waktu yang ditentukan oleh parameter
odps.sql.timezonedari proyek MaxCompute. Nilai valid:False: Zona waktu proyek MaxCompute tidak digunakan. Ini adalah nilai default.
True: Zona waktu proyek MaxCompute digunakan.
CatatanAnda juga dapat mengonfigurasi
set odps.sql.timezone=xxxdalam pernyataan untuk menggunakan zona waktu proyek MaxCompute.Zona waktu yang ditentukan dalam pernyataan memiliki prioritas lebih tinggi daripada zona waktu yang ditentukan dalam proyek. Zona waktu yang ditentukan dalam proyek memiliki prioritas lebih tinggi daripada zona waktu yang tidak Anda tentukan.
disableConnectinosSetting
disable_connection_setting
Tidak
Menentukan apakah parameter SQL dari koneksi dapat dikonfigurasi. Nilai valid:
False: Parameter SQL dari koneksi tidak dapat dikonfigurasi. Ini adalah nilai default.
True: Parameter SQL dari koneksi dapat dikonfigurasi.
Jika Anda mengatur parameter ini ke True, ketika Anda menjalankan perintah
setdalam pernyataan, parameter SQL dari pernyataan dan koneksi dikonfigurasi pada saat yang sama. Jika Anda mengatur parameter ini ke False, ketika Anda menjalankan perintah set xxx dalam pernyataan, hanya parameter SQL dari pernyataan yang dikonfigurasi.settings
settings
Tidak
Pengaturan global default
SQL settings. Nilai parameter ini dilewatkan dalam format JSON, seperti{"key":"value"}.tableList
table_list
Tidak
Nama tabel di MaxCompute. Nama tabel dalam format
projectname.tablename,projectname1.tablename1.connectTimeout
connect_timeout
Tidak
Periode timeout untuk membangun koneksi melalui jaringan dasar. Nilai default: 10. Unit: detik.
readTimeout
read_timeout
Tidak
Periode timeout untuk membaca data melalui koneksi jaringan dasar. Nilai default: 120. Unit: detik.
CatatanPeriode timeout koneksi dalam setiap permintaan API RESTful adalah jumlah dari nilai connectTimeout dan readTimeout. Periode timeout default setiap permintaan API RESTful adalah 130 detik. Secara default, jumlah maksimum percobaan ulang untuk membangun koneksi dalam permintaan API RESTful adalah 3.
Jika Anda ingin menyesuaikan periode timeout permintaan API RESTful, ubah nilai parameter readTimeout.
enableCommandApi
enable_command_api
Tidak
Menentukan apakah akan menggunakan commandAPI. Nilai valid:
False: CommandAPI tidak digunakan. Ini adalah nilai default.
True: CommandAPI digunakan.
Jika Anda mengatur parameter ini ke True, Anda dapat menjalankan perintah tertentu yang hanya dapat dijalankan pada klien MaxCompute (odpscmd) ketika Anda menggunakan driver JDBC.
httpsCheck
https_check
Tidak
Menentukan apakah akan melakukan verifikasi sertifikat berbasis HTTPS. Nilai valid:
False: Verifikasi sertifikat berbasis HTTPS tidak dilakukan. Ini adalah nilai default.
True: Verifikasi sertifikat berbasis HTTPS dilakukan.
tunnelConnectTimeout
tunnel_connect_timeout
Tidak
Periode timeout untuk koneksi tunnel ketika Anda menjalankan perintah Tunnel untuk mengunduh data. Nilai default: 180. Unit: detik.
tunnelReadTimeout
tunnel_read_timeout
Tidak
Periode timeout untuk membaca data ketika Anda menjalankan perintah Tunnel untuk mengunduh data. Nilai default: 300. Unit: detik.
skipCheckIfSelect
skipCheckIfSelect
Tidak
Menentukan apakah akan melewati penguraian SQL. Nilai valid:
False (default): Tidak melewati penguraian.
True: Melewati penguraian.
CatatanMelewati penguraian SQL akan mengurangi penggunaan CPU dan memori pada klien sampai batas tertentu, tetapi dapat meningkatkan latensi untuk pernyataan non-SELECT.
Parameter yang tidak terkait dengan MCQA (dalam mode offline)
Kunci URL
Kunci Properti
Diperlukan
Deskripsi
autoLimitFallback
auto_limit_fallback
Tidak
Menentukan apakah akan mengaktifkan fallback batas otomatis. Nilai valid:
False: Fallback batas otomatis dinonaktifkan. Ini adalah nilai default.
True: Fallback batas otomatis diaktifkan. Dalam mode offline, jika parameter ini disetel ke True, jumlah maksimum catatan data yang dapat diunduh adalah 10.000 ketika pesan kesalahan
tidak ada izin unduhanmuncul.
Parameter terkait MaxQA/MCQA 1.0 (dalam mode MaxQA/MCQA 1.0)
Parameter dasar
False: MCQA dinonaktifkan. Ini adalah nilai default.
True: MCQA diaktifkan.
Parameter terkait batas
Kunci URL
Kunci Properti
Diperlukan
Deskripsi
instanceTunnelMaxRecord
instance_tunnel_max_record
Tidak
Jumlah maksimum catatan dalam set hasil.
CatatanParameter ini hanya berlaku ketika parameter enableLimit disetel ke False.
instanceTunnelMaxSize
instance_tunnel_max_size
Tidak
Ukuran maksimum set hasil. Unit: byte.
autoSelectLimit
auto_select_limit
Tidak
Jumlah maksimum baris data dalam kueri.
Dalam lingkungan komputasi elastis Alibaba Cloud, sebanyak 1 juta baris data dapat dikueri secara default. Jika Anda ingin mengkueri lebih dari 1 juta baris data, Anda dapat mengonfigurasi parameter ini.
CatatanParameter ini hanya berlaku ketika parameter enableLimit disetel ke False.
Ketika Anda menggunakan driver JDBC versi V3.2.29 atau lebih baru, jika Anda mengonfigurasi parameter autoSelectLimit, parameter enableLimit secara otomatis disetel ke False.
enableLimit
enable_limit
Tidak
Menentukan apakah akan mengaktifkan batas pada jumlah maksimum catatan data dalam kueri. Nilai valid:
False: Batas pada jumlah maksimum catatan data dalam kueri dinonaktifkan.
True: Batas pada jumlah maksimum catatan data dalam kueri diaktifkan. Ini adalah nilai default.
Setelah batas pada jumlah maksimum catatan data dalam kueri diaktifkan, kontrol unduhan tidak diperiksa dan jumlah maksimum catatan hasil adalah 10.000.
Parameter terkait rollback
Kunci URL
Kunci Properti
Diperlukan
Deskripsi
fallbackForUnknownError
fallback_for_unknownerror
Tidak
Menentukan apakah akan mengembalikan pekerjaan MCQA ke mode offline ketika terjadi kesalahan yang tidak diketahui. Nilai valid:
False: Pekerjaan MCQA tidak dikembalikan ke mode offline.
True: Pekerjaan MCQA dikembalikan ke mode offline. Ini adalah nilai default.
fallbackForResourceNotEnough
fallback_for_resourcenotenough
Tidak
Menentukan apakah akan mengembalikan pekerjaan MCQA ke mode offline ketika sumber daya tidak mencukupi. Nilai valid:
False: Pekerjaan MCQA tidak dikembalikan ke mode offline.
True: Pekerjaan MCQA dikembalikan ke mode offline. Ini adalah nilai default.
fallbackForUpgrading
fallback_for_upgrading
Tidak
Menentukan apakah akan mengembalikan pekerjaan MCQA ke mode offline selama pemutakhiran. Nilai valid:
False: Pekerjaan MCQA tidak dikembalikan ke mode offline.
True: Pekerjaan MCQA dikembalikan ke mode offline. Ini adalah nilai default.
fallbackForRunningTimeout
fallback_for_runningtimeout
Tidak
Menentukan apakah akan mengembalikan pekerjaan MCQA ke mode offline jika koneksi habis waktu ketika Anda menjalankan perintah. Nilai valid:
False: Pekerjaan MCQA tidak dikembalikan ke mode offline.
True: Pekerjaan MCQA dikembalikan ke mode offline. Ini adalah nilai default.
fallbackForUnsupportedFeature
fallbackForUnsupportedFeature
Tidak
Menentukan apakah akan mengembalikan pekerjaan MCQA ke mode offline dalam skenario di mana MCQA tidak didukung. Nilai valid:
False: Pekerjaan MCQA tidak dikembalikan ke mode offline.
True: Pekerjaan MCQA dikembalikan ke mode offline. Ini adalah nilai default.
alwaysFallback
always_fallback
Tidak
Menentukan apakah akan mengembalikan pekerjaan MCQA ke mode offline dalam semua skenario sebelumnya. Nilai valid:
False: Auto limit fallback dinonaktifkan. Ini adalah nilai default.
True: Pekerjaan MCQA dikembalikan ke mode offline.
CatatanParameter ini hanya berlaku ketika Anda menggunakan driver JDBC MaxCompute versi V3.2.3 atau lebih baru.
disableFallback
disable_fallback
Tidak
Menentukan apakah tidak akan mengembalikan pekerjaan MCQA ke mode offline dalam semua skenario sebelumnya. Nilai valid:
False: Pekerjaan MCQA dikembalikan ke mode offline. Ini adalah nilai default.
True: Pekerjaan MCQA tidak dikembalikan ke mode offline.
fallbackQuota
fallback_quota
Tidak
Nama kuota yang dipilih ketika pekerjaan MCQA dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, kuota default dari proyek MaxCompute digunakan.
Kunci URL
Kunci Properti
Diperlukan
Deskripsi
interactiveMode
interactive_mode
Tidak
Menentukan apakah akan mengaktifkan MaxCompute Query Acceleration (MaxQA/MCQA 1.0). Nilai valid:
executeProject
execute_project_name
Tidak
Nama proyek MaxCompute di mana tugas SQL dieksekusi.
tunnelRetryTime
tunnel_retry_time
Tidak
Jumlah maksimum percobaan ulang untuk perintah Tunnel yang ditentukan oleh SQLExecutor. Nilai default: 6.
attachTimeout
attach_timeout
Tidak
Periode timeout untuk membangun koneksi ketika MaxQA/MCQA 1.0 diaktifkan. Nilai default: 60. Unit: detik.
fallbackQuota
fallback_quota
Tidak
Nama kuota yang dipilih ketika pekerjaan MaxQA/MCQA 1.0 dikembalikan. Jika Anda tidak mengonfigurasi parameter ini, kuota default dari proyek MaxCompute digunakan.
quotaName
quota_name
Tidak
Kuota sumber daya komputasi digunakan oleh pekerjaan MaxQA.
Sambungkan ke MaxCompute
Muat driver JDBC MaxCompute.
Class.forName("com.aliyun.odps.jdbc.OdpsDriver");Gunakan DriverManager untuk membangun koneksi ke MaxCompute.
Connection cnct = DriverManager.getConnection(url, accessId, accessKey);url: URL dalam format
jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project_name>[&useProjectTimeZone={true|false}]. Parameter:<maxcompute_endpoint>: titik akhir layanan MaxCompute di wilayah tertentu. Misalnya, titik akhir publik MaxCompute di wilayah China (Hangzhou) adalah
http://service.cn-hangzhou.maxcompute.aliyun.com/api. Untuk informasi lebih lanjut tentang konfigurasi titik akhir, lihat Titik Akhir.<maxcompute_project_name>: nama Proyek MaxCompute Anda.
useProjectTimeZone: menentukan apakah akan menggunakan zona waktu Proyek MaxCompute.
Contoh perintah:
jdbc:odps:http://service.cn-hangzhou.maxcompute.aliyun.com/api?project=test_project&useProjectTimeZone=true;accessId: ID AccessKey akun yang digunakan untuk membuat Proyek.
accessKey: Rahasia AccessKey yang sesuai dengan ID AccessKey akun yang digunakan untuk membuat Proyek.
CatatanUntuk informasi lebih lanjut tentang cara membuat dan melihat ID AccessKey dan Rahasia AccessKey, lihat Buat akun Alibaba Cloud.
Lakukan kueri data.
try ( Statement stmt = cnct.createStatement(); ResultSet rset = stmt.executeQuery("SELECT foo FROM bar;") ) { while (rset.next()) { // proses hasil } } catch (SQLException e) { // tangani pengecualian } finally { if (cnct != null) { try { cnct.close(); } catch (SQLException e) { // Abaikan atau catat pengecualian yang ditutup } } }
Kode contoh
Hapus tabel, buat tabel, dan dapatkan metadata
CatatanJika dependensi JDBC digunakan dalam proyek, Anda tidak perlu menentukan dependensi SDK. Setelah Anda mengonfigurasi dependensi JDBC, SDK terkait secara otomatis digunakan. Menentukan dependensi SDK dapat menyebabkan kesalahan karena ketidaksesuaian versi saat menjalankan kode.
import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Main { private static final String DRIVER_NAME = "com.aliyun.odps.jdbc.OdpsDriver"; // Pasangan AccessKey akun Alibaba Cloud memiliki izin pada semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan rutin. Untuk membuat pengguna RAM, masuk ke konsol RAM. // Dalam contoh ini, ID AccessKey dan Rahasia AccessKey disimpan dalam variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda dalam file konfigurasi berdasarkan kebutuhan bisnis Anda. // Untuk mencegah kebocoran pasangan AccessKey, kami merekomendasikan agar Anda tidak langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode. private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } try ( Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project>", Main.accessId, Main.accessKey); Statement stmt = conn.createStatement() ) { // buat tabel final String tableName = "jdbc_test"; stmt.execute("DROP TABLE IF EXISTS " + tableName); stmt.execute("CREATE TABLE " + tableName + " (key BIGINT, value STRING)"); // dapatkan metadata DatabaseMetaData metaData = conn.getMetaData(); System.out.println("product = " + metaData.getDatabaseProductName()); System.out.println("jdbc version = " + metaData.getDriverMajorVersion() + ", " + metaData.getDriverMinorVersion()); try (ResultSet tables = metaData.getTables(null, "default", tableName, null)) { while (tables.next()) { String name = tables.getString("TABLE_NAME"); System.out.println("memeriksa tabel: " + name); try (ResultSet columns = metaData.getColumns(null, null, name, null)) { while (columns.next()) { System.out.println( columns.getString("COLUMN_NAME") + "\t" + columns.getString("TYPE_NAME") + "(" + columns.getInt("DATA_TYPE") + ")"); } } } } } catch (SQLException e) { e.printStackTrace(); } } }Hasil berikut dikembalikan:
product = MaxCompute/ODPS jdbc version = 3, 8 memeriksa tabel: jdbc_test key BIGINT(-5) value STRING(12)Perbarui tabel
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; public class Main { private static final String DRIVER_NAME = "com.aliyun.odps.jdbc.OdpsDriver"; // Pasangan AccessKey akun Alibaba Cloud memiliki izin pada semua operasi API. Jika Anda menggunakan kredensial ini untuk melakukan operasi, risiko keamanan mungkin terjadi. Kami merekomendasikan agar Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan rutin. Untuk membuat pengguna RAM, masuk ke konsol RAM. // Dalam contoh ini, ID AccessKey dan Rahasia AccessKey disimpan sebagai variabel lingkungan. Anda juga dapat menyimpan pasangan AccessKey Anda dalam file konfigurasi berdasarkan kebutuhan bisnis Anda. // Untuk mencegah kebocoran pasangan AccessKey, kami merekomendasikan agar Anda tidak langsung menentukan ID AccessKey dan Rahasia AccessKey dalam kode. private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } try ( Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project>", Main.accessId, Main.accessKey); Statement stmt = conn.createStatement() ) { // Perintah DML berikut juga berfungsi // String dml = "INSERT INTO jdbc_test SELECT 1, \"foo\""; String dml = "INSERT INTO jdbc_test VALUES(1, \"foo\")"; int ret = stmt.executeUpdate(dml); assert ret == 1; } catch (SQLException e) { e.printStackTrace(); } } }Perbarui beberapa tabel secara bersamaan
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class Main { private static final String DRIVER_NAME = "com.aliyun.odps.jdbc.OdpsDriver"; // Pasangan AccessKey akun Alibaba Cloud memiliki izin pada semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan 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 dalam file konfigurasi berdasarkan kebutuhan bisnis Anda. // Kami merekomendasikan agar Anda tidak mengkodekan ID AccessKey dan Rahasia AccessKey secara keras dalam kode Anda. Jika tidak, pasangan AccessKey mungkin bocor. private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } try ( Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute endpoint>?project=<maxcompute project>", Main.accessId, Main.accessKey); PreparedStatement pstmt = conn.prepareStatement("INSERT INTO jdbc_test VALUES(?, ?)") ) { // Batch pertama pstmt.setLong(1, 1L); pstmt.setString(2, "foo"); pstmt.addBatch(); // Batch kedua pstmt.setLong(1, 2L); pstmt.setString(2, "bar"); pstmt.addBatch(); int[] ret = pstmt.executeBatch(); assert ret[0] == 1; assert ret[1] == 1; } catch (SQLException e) { e.printStackTrace(); } } }CatatanMetode executeBatch tidak cocok untuk penulisan data batch ke tabel terkluster. Misalnya, Anda tidak dapat menggunakan metode ini untuk menulis batch data ke Transaction Table 2.0 sekaligus.
Jika Anda menulis batch data ke tabel partisi standar sekaligus, Anda harus menentukan partisi tempat data ditulis dalam pernyataan INSERT INTO. Kode berikut menunjukkan contohnya:
-- Jalankan pernyataan berikut untuk membuat tabel partisi sale_detail. create table if not exists sale_detail ( shop_name string, customer_id string, total_price double ) partitioned by (sale_date string, region string); -- Jika tabel partisi berisi partisi sale_date='20240219' dan region='hangzhou', jalankan pernyataan INSERT INTO berikut untuk menulis batch data ke tabel partisi sekaligus: INSERT INTO sale_detail PARTITION(sale_date='20240219', region='hangzhou') VALUES(?, ?, ?)
Kueri data dari tabel
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class Main { private static final String DRIVER_NAME = "com.aliyun.odps.jdbc.OdpsDriver"; // Pasangan AccessKey akun Alibaba Cloud memiliki izin pada semua operasi API. Jika Anda menggunakan pasangan AccessKey untuk memanggil operasi API, risiko mungkin terjadi. Kami merekomendasikan agar Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan 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 dalam file konfigurasi berdasarkan kebutuhan bisnis Anda. // Kami merekomendasikan agar Anda tidak mengkodekan ID AccessKey dan Rahasia AccessKey secara keras dalam kode Anda. Jika tidak, pasangan AccessKey mungkin bocor. private static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) { try { Class.forName(DRIVER_NAME); } catch (ClassNotFoundException e) { e.printStackTrace(); System.exit(1); } try ( Connection conn = DriverManager.getConnection( "jdbc:odps:<maxcompute endpoint>?project=<maxcompute project>", accessId, accessKey); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM JDBC_TEST") ) { while (rset.next()) { System.out.println(rset.getInt(1) + "\t" + rset.getString(2)); } } catch (SQLException e) { e.printStackTrace(); } } }CatatanOdpsStatement mendukung metode berikut:
execute(sql),executeQuery(sql), danexecuteUpdate(sql). Metodeexecute(sql)danexecuteQuery(sql)mendukung perintah umum berikut:desc table,show tables, danshow partitions.