Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Usage

Son Güncelleme:Oct 10, 2026

Bu kılavuzda, MaxCompute JDBC sürücüsünün nasıl indirileceği ve MaxCompute'e nasıl bağlanılacağı açıklanmaktadır. Başlamanıza yardımcı olacak örnek kodlar içerir.

Dikkat edilmesi gerekenler

  • MaxCompute JDBC sürücüsünü kullanarak SQL ifadelerini çalıştırmak ve yürütme sonuçlarını almak için aşağıdaki gereksinimleri karşılamanız gerekir:

    • Bir projenin üyesi olmalısınız.

    • Proje üzerinde CREATE INSTANCE iznine sahip olmalısınız.

    • Kullanmak istediğiniz tablo üzerinde SELECT ve DOWNLOAD izinlerine sahip olmalısınız.

      Not
      • MaxCompute JDBC V1.9 veya önceki bir sürümü kullanırken, her sorgu için otomatik olarak geçici bir tablo oluşturulur. Sorgu sonuçlarını geçici tablodan almak için Tunnel komutlarını kullanabilirsiniz. Bu sürümleri kullanmak için CREATE TABLE iznine sahip olmanız gerekir.

      • MaxCompute JDBC V2.2 veya sonraki bir sürümü kullanırken, her sorgu için otomatik olarak geçici bir tablo oluşturulmaz. CREATE TABLE izniniz olsun veya olmasın, sorgu sonuçlarını almak için InstanceTunnel arayüzünü çağırabilirsiniz.

      MaxCompute izinleri hakkında daha fazla bilgi için bkz. MaxCompute izinleri.

  • MaxCompute veri koruma özelliğini sunar. Bir proje için veri koruma özelliği etkinleştirildiyse verileri projeden dışarı taşıyamazsınız. V2.4'ten önceki bir MaxCompute JDBC sürümü kullanıyorsanız result sets alınamaz. MaxCompute JDBC V2.4 veya sonraki bir sürümü kullanıyorsanız aldığınız sonuç satırı sayısı READ_TABLE_MAX_ROW parametresinin değerini aşamaz. Bu parametre hakkında daha fazla bilgi için bkz. Proje komutları. Veri koruma özelliği hakkında daha fazla bilgi için bkz. Proje veri koruması.

  • MaxCompute V2.0 veri türü sürümü; TINYINT, SMALLINT, DATETIME, TIMESTAMP, ARRAY, MAP ve STRUCT gibi daha fazla veri türünü destekler. Bu yeni veri türlerini kullanmak için MaxCompute V2.0 veri türü sürümünü etkinleştirmek üzere aşağıdaki komutu çalıştırmanız gerekir. Daha fazla bilgi için bkz. Veri türü sürüm kılavuzu.

    set odps.sql.type.system.odps2=true
  • JDBC V3.4.1 ve sonraki sürümler için uzun SQL sorgularınız (1 KB'den uzun) varsa eşzamanlılığı dikkatli bir şekilde kontrol etmeniz gerekir. Örneğin 8 vCPU ve 16,0 GiB belleğe sahip bir ECS örneği kullanırken eşzamanlılık 100'ü aşmamalıdır. Eşzamanlılığı etkili bir şekilde kontrol edemiyorsanız JDBC'yi V3.8.8 veya V3.9.3 sürümüne yükseltebilir ve SQL ayrıştırma özelliğini devre dışı bırakmak için skipCheckIfSelect=true ayarlayabilirsiniz. Bu özellik hakkında daha fazla bilgi için bkz. Sürüm güncellemeleri.

JDBC sürücüsünü indirin

Farklı sürümler için MaxCompute JAR paketlerini OSS, GitHub veya Maven deposu üzerinden edinebilirsiniz. Tüm bağımlılıkları içeren JAR paketini (jar-with-dependencies) indirmenizi öneririz.

Aşağıdaki örnek, MaxCompute JDBC sürücüsünü Maven ile kullanmak için Project Object Model (POM) bağımlılığını göstermektedir.

<dependency>
  <groupId>com.aliyun.odps</groupId>
  <artifactId>odps-jdbc</artifactId>
  <version>3.8.6</version>
  <classifier>jar-with-dependencies</classifier>
</dependency>
Not

MaxCompute JDBC sürücüsü, aliyun-odps-jdbc adresinde bulunan açık kaynaklı bir projedir.

JDBC sürücüsünün geliştirilmesine ve iyileştirilmesine katkılarınızı bekliyoruz. Sorunları Issues sayfasında bildirebilir veya Pull requests aracılığıyla kod iyileştirmelerinde bulunabilirsiniz. Issues ve Pull requests kullanırken projenin şablon gereksinimlerini takip edin.

JDBC parametreleri

JDBC'yi URL parametreleri ve Properties nesnelerini kullanarak yapılandırabilirsiniz. Properties nesnelerinin önceliği daha yüksektir ve URL parametrelerinin üzerine yazar.

Not

URL anahtarı odps_config=config_file içeriyorsa JDBC config_file dosyasını Properties parametreleri olarak okur.

  • Temel parametreler


    URL anahtarı


    Özellik anahtarı


    Gerekli


    Açıklama


    project


    project_name


    Evet


    MaxCompute projesinin adı.


    accessId


    access_id


    Evet

    Alibaba Cloud hesabınızın AccessKey kimliği.

    AccessKey kimliğinizi AccessKey Management sayfasından edinebilirsiniz.


    accessKey


    access_key


    Evet

    Alibaba Cloud hesabınızın AccessKey gizli anahtarı.

    AccessKey gizli anahtarınızı AccessKey Management sayfasından edinebilirsiniz.


    logview


    logview_host


    Hayır


    MaxCompute LogView URL'si. Değer http://logview.odps.aliyun.com olarak sabittir.


    tunnelEndpoint


    tunnel_endpoint


    Hayır

    MaxCompute Tunnel hizmetinin uç noktası.

    Her bölge ve ağ türü için Tunnel uç noktaları hakkında bilgi almak için bkz. Uç noktalar.

  • Günlük yapılandırma parametreleri

    URL anahtarı

    Özellik anahtarı

    Gerekli

    Açıklama

    enableOdpsLogger

    enable_odps_logger

    Hayır

    MaxCompute JDBC günlük kaydedicisinin etkinleştirilip etkinleştirilmeyeceğini belirtir. Geçerli değerler:

    • False (varsayılan): Günlük kaydedici devre dışı bırakılır.

    • True: Etkinleştirildi. Günlükler, JAR paketinin dizinindeki jdbc.log dosyasına yazılır.

    logConfFile

    log_conf_file

    Hayır

    Çıktı dosyası ve logLevel gibi günlük çıktısını esnek bir şekilde yapılandırmak için ek bir SLF4J yapılandırma dosyası belirtebilirsiniz. Bu yöntem, projenizin pom.xml dosyasına aşağıdaki bağımlılıkları eklemenizi gerektirir:

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

    Yapılandırma örneği için bkz. Yapılandırma dosyası örneği.

    logLevel

    log_level

    Hayır

    Çıktının günlük düzeyi. Varsayılan değer: INFO.

  • Diğer parametreler

    URL anahtarı

    Özellik anahtarı

    Gerekli

    Açıklama

    stsToken

    sts_token

    Hayır

    Alibaba Cloud STS belirteci.

    charset

    charset

    Hayır

    Giriş ve çıkış için kullanılan karakter kümesi. Varsayılan değer: UTF-8.

    useProjectTimeZone

    use_project_time_zone

    Hayır

    Projenin odps.sql.timezone özelliğinin kullanılıp kullanılmayacağını belirtir. Geçerli değerler:

    • False (varsayılan): Özellik kullanılmaz.

    • True: Özellik kullanılır.

    Not

    Saat dilimini bir ifadede set odps.sql.timezone=xxx kullanarak da belirtebilirsiniz.

    Öncelik sırası: İfade > proje > null.

    disableConnectionSetting

    disable_connection_setting

    Hayır

    Bir bağlantı için SQL parametrelerinin ayarlanmasına izin verilip verilmeyeceğini belirtir. Geçerli değerler:

    • False (varsayılan): İzin verilmez.

    • True: İzin verilir.

    Bu parametre true olarak ayarlandığında set xxx komutu hem ifadeye hem de bağlantıya uygulanır. Aksi takdirde yalnızca ifadeye uygulanır.

    settings

    settings

    Hayır

    Global varsayılan sql setting için bir JSON dizesi. Örnek: {"key":"value"}.

    tableList

    table_list

    Hayır

    MaxCompute tablolarının adları. Format: projectname.tablename,projectname1.tablename1.

    connectTimeout

    connect_timeout

    Hayır

    Bir ağ bağlantısı kurmak için zaman aşımı süresi. Varsayılan değer: 10 saniye (s).

    readTimeout

    read_timeout

    Hayır

    Bir ağ bağlantısından veri okumak için zaman aşımı süresi. Varsayılan değer: 120 saniye (s).

    Not
    • Her RESTful API isteği için toplam zaman aşımı, varsayılan olarak 130 saniye olan connectTimeout ve readTimeout değerlerinin toplamıdır. Sürücü, her isteği en fazla 3 kez yeniden dener.

    • RESTful API istekleri için bağlantı zaman aşımını ayarlamak amacıyla readTimeout parametresini değiştirin.

    enableCommandApi

    enable_command_api

    Hayır

    Komut API'sinin kullanılıp kullanılmayacağını belirtir. Geçerli değerler:

    • False (varsayılan): Komut API'si kullanılmaz.

    • True: Komut API'si kullanılır.

      Etkinleştirildiğinde normalde yalnızca odpscmd'ye özel olan komutları JDBC'de çalıştırabilirsiniz.

    httpsCheck

    https_check

    Hayır

    HTTPS sertifikası doğrulamasının yapılıp yapılmayacağını belirtir. Geçerli değerler:

    • False (varsayılan): Doğrulama yapılmaz.

    • True: Doğrulama yapılır.

    tunnelConnectTimeout

    tunnel_connect_timeout

    Hayır

    Veri indirirken Tunnel için bağlantı zaman aşımı süresi. Varsayılan değer: 180 saniye (s).

    tunnelReadTimeout

    tunnel_read_timeout

    Hayır

    Veri indirirken Tunnel için okuma zaman aşımı süresi. Varsayılan değer: 300 saniye (s).

    skipCheckIfSelect

    skipCheckIfSelect

    Hayır

    SQL ayrıştırmanın atlanıp atlanmayacağını belirtir. Geçerli değerler:

    • False (varsayılan): Ayrıştırma atlanmaz.

    • True: Ayrıştırma atlanır.

    Not

    Ayrıştırmayı atlamak, istemci tarafındaki CPU ve bellek tüketimini azaltabilir ancak SELECT olmayan ifadeler için gecikme süresini artırabilir.

  • MCQA dışı parametreler (yalnızca çevrimdışı modda etkili)

    URL anahtarı

    Özellik anahtarı

    Gerekli

    Açıklama

    autoLimitFallback

    auto_limit_fallback

    Hayır

    Otomatik limit geri dönüşü. Geçerli değerler:

    • False (varsayılan): Geri dönüş yapılmaz.

    • True: Geri dönüş yapılır. Çevrimdışı modda, Tunnel bir no download permission istisnası raporladığında sürücü otomatik olarak geri döner ve indirilen kayıt sayısını 10.000 ile sınırlar.

  • MaxQA/MCQA 1.0 parametreleri (yalnızca MaxQA/MCQA 1.0 için etkili)

    • Temel yapılandırma

    • URL anahtarı

      Özellik anahtarı

      Gerekli

      Açıklama

      interactiveMode

      interactive_mode

      Hayır

      MaxQA/MCQA 1.0'ın etkinleştirilip etkinleştirilmeyeceğini belirtir. Geçerli değerler:

      • False (varsayılan): Devre dışı.

      • True: Etkin.

      executeProject

      execute_project_name

      Hayır

      SQL görevinin fiilen çalıştığı MaxCompute projesinin adı.

      tunnelRetryTime

      tunnel_retry_time

      Hayır

      SQLExecutor için Tunnel yeniden deneme sayısı. Varsayılan değer: 6.

      attachTimeout

      attach_timeout

      Hayır

      MCQA 1.0 bağlantısı kurmak için zaman aşımı süresi. Varsayılan değer: 60 saniye (s).

      fallbackQuota

      fallback_quota

      Hayır

      Bir MCQA 1.0 işi geri düştüğünde kullanılacak kota. Yapılandırılmadıysa projenin varsayılan kotasi kullanılır.

      quotaName

      quota_name

      Hayır

      MaxQA işi tarafından kullanılan hesaplama kaynağı kotasi.

    • Limit ile ilgili parametreler

      URL anahtarı

      Özellik anahtarı

      Gerekli

      Açıklama

      instanceTunnelMaxRecord

      instance_tunnel_max_record

      Hayır

      Sonuç kümesindeki maksimum kayıt sayısı.

      Not

      Bu parametre yalnızca enableLimit parametresi False olarak ayarlandığında etkili olur.

      instanceTunnelMaxSize

      instance_tunnel_max_size

      Hayır

      Sonuç kümesinin maksimum boyutu. Birim: byte.

      autoSelectLimit

      auto_select_limit

      Hayır

      Otomatik sorgu limiti.

      Varsayılan olarak Alibaba Cloud genel cloud ortamlarında en fazla 1.000.000 satır sorgulayabilirsiniz. Daha fazla veri sorgulamak için bu parametreyi yapılandırabilirsiniz.

      Not
      • Bu parametre yalnızca enableLimit parametresi False olarak ayarlandığında etkili olur.

      • JDBC V3.2.29 ve sonraki sürümler için autoSelectLimit parametresini ayarlarsanız enableLimit parametresi otomatik olarak False olarak ayarlanır.

      enableLimit

      enable_limit

      Hayır

      Limitin etkinleştirilip etkinleştirilmeyeceğini belirtir. Geçerli değerler:

      • False: Limit etkin değil.

      • True (varsayılan): Limit etkin.

        Etkinleştirilirse indirme izni kontrol edilmez ve sonuç kümeleri varsayılan olarak 10.000 kayıtla sınırlanır.

    • Geri dönüş ile ilgili parametreler

      URL anahtarı

      Özellik anahtarı

      Gerekli

      Açıklama

      fallbackForUnknownError

      fallback_for_unknownerror

      Hayır

      Bilinmeyen bir hata oluştuğunda çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:

      • False: Geri dönüş yapılmaz.

      • True (varsayılan): Geri dönüş yapılır.

      fallbackForResourceNotEnough

      fallback_for_resourcenotenough

      Hayır

      Kaynaklar yetersiz olduğunda çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:

      • False: Geri dönüş yapılmaz.

      • True (varsayılan): Geri dönüş yapılır.

      fallbackForUpgrading

      fallback_for_upgrading

      Hayır

      Yükseltme sırasında çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:

      • False: Geri dönüş yapılmaz.

      • True (varsayılan): Geri dönüş yapılır.

      fallbackForRunningTimeout

      fallback_for_runningtimeout

      Hayır

      Bir işlem komutu zaman aşımına uğradığında çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:

      • False: Geri dönüş yapılmaz.

      • True (varsayılan): Geri dönüş yapılır.

      fallbackForUnsupportedFeature

      fallback_for_unsupported_feature

      Hayır

      Desteklenmeyen bir MCQA özelliği kullanıldığında çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:

      • False: Geri dönüş yapılmaz.

      • True (varsayılan): Geri dönüş yapılır.

      alwaysFallback

      always_fallback

      Hayır

      Yukarıdaki tüm senaryolarda çevrimdışı moda geri dönülüp dönülmeyeceğini belirtir. Geçerli değerler:

      • False (varsayılan): Geri dönüş yapılmaz.

      • True: Geri dönüş yapılır.

      Not

      Bu parametre yalnızca JDBC V3.2.3 ve sonraki sürümlerde desteklenir.

      disableFallback

      disable_fallback

      Hayır

      Yukarıdaki tüm senaryolarda çevrimdışı moda geri dönüşün devre dışı bırakılıp bırakılmayacağını belirtir. Geçerli değerler:

      • False (varsayılan): Geri dönüş yapılır.

      • True: Geri dönüş yapılmaz.

      fallbackQuota

      fallback_quota

      Hayır

      Bir MCQA işinin geri düştüğü kotanın adı. Yapılandırılmadıysa projenin varsayılan kotasi kullanılır.

MaxCompute'e bağlanın

  1. MaxCompute JDBC sürücüsünü yükleyin.

    Class.forName("com.aliyun.odps.jdbc.OdpsDriver");
  2. DriverManager kullanarak bir bağlantı oluşturun.

    Connection cnct = DriverManager.getConnection(url, accessId, accessKey);
    • url: URL aşağıdaki formatta olmalıdır: jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project_name>[&useProjectTimeZone={true|false}]. Parametreler şu şekilde açıklanmıştır:

      • <maxcompute_endpoint>: Bölge için MaxCompute hizmetinin uç noktası. Örneğin Çin (Hangzhou) bölgesi için genel uç nokta http://service.cn-hangzhou.maxcompute.aliyun.com/api şeklindedir. Daha fazla bilgi için bkz. Uç noktalar.

      • <maxcompute_project_name>: MaxCompute projesinin adı.

      • useProjectTimeZone: MaxCompute projesinin saat diliminin kullanılıp kullanılmayacağını belirtir.

      Örnek:

      jdbc:odps:http://service.cn-hangzhou.maxcompute.aliyun.com/api?project=test_project&useProjectTimeZone=true;
    • accessId: Alibaba Cloud hesabınızın AccessKey kimliği.

    • accessKey: AccessKey kimliğine karşılık gelen AccessKey gizli anahtarı.

      Not

      Bir AccessKey kimliği ve AccessKey gizli anahtarı oluşturmak ve görüntülemek için bkz. Alibaba Cloud hesabı hazırlama.

  3. Bir sorgu çalıştırın.

    try (
        Statement stmt = cnct.createStatement();
        ResultSet rset = stmt.executeQuery("SELECT foo FROM bar;")
    ) {
        while (rset.next()) {
          // process the results
        }
    } catch (SQLException e) {
      // handle the exception
    } finally {
        if (cnct != null) {
            try {
                cnct.close();
            } catch (SQLException e) {
                // Ignore or record a closed exception
            }
        }
    }

Örnek kod

  • Tabloyu silin, tablo oluşturun ve meta verileri alın

    Not

    Projeye JDBC bağımlılığını eklerseniz SDK bağımlılığını ayrı olarak eklemeyin. JDBC bağımlılığı gerekli SDK'yı içerir ve ayrı olarak eklenmesi sürüm uyumsuzluğu hatalarına neden olabilir.

    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";
        // An Alibaba Cloud account's AccessKey pair has permissions for all API operations, which is a security risk. We strongly recommend using a RAM user for API access or routine O&M. To create a RAM user, log on to the RAM console.
        // This example stores the AccessKey ID and AccessKey secret in environment variables. You can also store them in a configuration file based on your business requirements.
        // For security, do not hardcode the AccessKey ID and AccessKey secret in your code.
        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()
            ) {
                // create a table
                final String tableName = "jdbc_test";
                stmt.execute("DROP TABLE IF EXISTS " + tableName);
                stmt.execute("CREATE TABLE " + tableName + " (key BIGINT, value STRING)");
    
                // get meta data
                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("inspecting table: " + 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();
            }
        }
    }

    Örnek çıktı:

    product = MaxCompute/ODPS
    jdbc version = 3, 8
    inspecting table: jdbc_test
    key    BIGINT(-5)
    value    STRING(12)
  • Tabloyu güncelleyin

    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";
        // An Alibaba Cloud account's AccessKey pair has permissions for all API operations, which is a security risk. We strongly recommend using a RAM user for API access or routine O&M. To create a RAM user, log on to the RAM console.
        // This example stores the AccessKey ID and AccessKey secret in environment variables. You can also store them in a configuration file based on your business requirements.
        // For security, do not hardcode the AccessKey ID and AccessKey secret in your code.
        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()
            ) {
                // The following DML also works
                // 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();
            }
        }
    }
  • Tabloyu toplu olarak güncelleyin

    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";
        // An Alibaba Cloud account's AccessKey pair has permissions for all API operations, which is a security risk. We strongly recommend using a RAM user for API access or routine O&M.
        // This example stores the AccessKey ID and AccessKey secret in environment variables. You can also store them in a configuration file based on your business requirements.
        // For security, do not hardcode the AccessKey ID and AccessKey secret in your code.
        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(?, ?)")
            ) {
                // First batch
                pstmt.setLong(1, 1L);
                pstmt.setString(2, "foo");
                pstmt.addBatch();
    
                // Second batch
                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();
            }
        }
    }
    Not
    • executeBatch yöntemi Transaction Table 2.0 tabloları gibi kümelenmiş tablolara toplu yazmayı desteklemez.

    • Standart bir bölümlenmiş tabloya toplu olarak veri yazmak için INSERT INTO ifadesinde hedef bölümü belirtmeniz gerekir. Örnek:

      -- The table creation statement for the partitioned table sale_detail is as follows.
      create table if not exists sale_detail
      (
      shop_name string,
      customer_id string,
      total_price double
      )
      partitioned by (sale_date string, region string);
      
      -- Assume that the partition sale_date='20240219', region='hangzhou' already exists. The INSERT INTO statement for batch writes to the partitioned table is as follows.
      INSERT INTO sale_detail PARTITION(sale_date='20240219', region='hangzhou') VALUES(?, ?, ?)
  • Tabloyu sorgulayın

    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";
        // An Alibaba Cloud account's AccessKey pair has permissions for all API operations, which is a security risk. We strongly recommend using a RAM user for API access or routine O&M.
        // This example stores the AccessKey ID and AccessKey secret in environment variables. You can also store them in a configuration file based on your business requirements.
        // For security, do not hardcode the AccessKey ID and AccessKey secret in your code.
        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();
            }
        }
    }
    Not

    OdpsStatement üç yöntemi destekler: execute(sql), executeQuery(sql) ve executeUpdate(sql). execute(sql) ve executeQuery(sql) yöntemleri ayrıca üç yaygın komutu da destekler: desc table, show tables ve show partitions.