全部产品
Search
文档中心

MaxCompute:Catatan Penggunaan

更新时间:Jul 06, 2025

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.

      Catatan
      • Jika 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 hasil yang 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>
Catatan

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.

Catatan

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.log dari 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.xml dalam 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.timezone dari proyek MaxCompute. Nilai valid:

    • False: Zona waktu proyek MaxCompute tidak digunakan. Ini adalah nilai default.

    • True: Zona waktu proyek MaxCompute digunakan.

    Catatan

    Anda juga dapat mengonfigurasi set odps.sql.timezone=xxx dalam 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 set dalam 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.

    Catatan
    • Periode 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.

    Catatan

    Melewati 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 unduhan muncul.

  • Parameter terkait MaxQA/MCQA 1.0 (dalam mode MaxQA/MCQA 1.0)

    • Parameter dasar

    • Kunci URL

      Kunci Properti

      Diperlukan

      Deskripsi

      interactiveMode

      interactive_mode

      Tidak

      Menentukan apakah akan mengaktifkan MaxCompute Query Acceleration (MaxQA/MCQA 1.0). Nilai valid:

      • False: MCQA dinonaktifkan. Ini adalah nilai default.

      • True: MCQA diaktifkan.

      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.

    • Parameter terkait batas

      Kunci URL

      Kunci Properti

      Diperlukan

      Deskripsi

      instanceTunnelMaxRecord

      instance_tunnel_max_record

      Tidak

      Jumlah maksimum catatan dalam set hasil.

      Catatan

      Parameter 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.

      Catatan
      • Parameter 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.

      Catatan

      Parameter 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.

Sambungkan ke MaxCompute

  1. Muat driver JDBC MaxCompute.

    Class.forName("com.aliyun.odps.jdbc.OdpsDriver");
  2. 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.

      Catatan

      Untuk informasi lebih lanjut tentang cara membuat dan melihat ID AccessKey dan Rahasia AccessKey, lihat Buat akun Alibaba Cloud.

  3. 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

    Catatan

    Jika 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();
            }
        }
    }
    Catatan
    • Metode 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();
            }
        }
    }
    Catatan

    OdpsStatement mendukung metode berikut: execute(sql), executeQuery(sql), dan executeUpdate(sql). Metode execute(sql) dan executeQuery(sql) mendukung perintah umum berikut: desc table, show tables, dan show partitions.