すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:使用方法に関する注意事項

最終更新日:Jun 27, 2025

このトピックでは、MaxCompute JDBC ドライバーの JAR パッケージをダウンロードし、ドライバーを使用して MaxCompute に接続する方法について説明します。また、サンプルコードも提供します。

使用方法に関する注意事項

  • MaxCompute JDBC ドライバーを使用して SQL 文を実行し、実行結果を取得するには、次の要件を満たす必要があります。

    • プロジェクトのメンバーであること。

    • プロジェクトに対する CREATE INSTANCE 権限を持っていること。

    • 使用するテーブルに対する SELECT および DOWNLOAD 権限を持っていること。

      説明
      • MaxCompute JDBC V1.9 以前を使用する場合、クエリごとに一時テーブルが自動的に作成されます。Tunnel コマンドを使用して、一時テーブルからクエリ結果を取得できます。これらのバージョンを使用するには、CREATE TABLE 権限が必要です。

      • MaxCompute JDBC V2.2 以降を使用する場合、クエリごとに一時テーブルは自動的に作成されません。CREATE TABLE 権限の有無に関係なく、InstanceTunnel インターフェースを呼び出してクエリ結果を取得できます。

      MaxCompute の権限の詳細については、「MaxCompute の権限」をご参照ください。

  • MaxCompute はデータ保護機能を提供します。プロジェクトでデータ保護機能が有効になっている場合、プロジェクトからデータを移動することはできません。V2.4 より前のバージョンの MaxCompute JDBC を使用している場合、結果セット を取得することはできません。MaxCompute JDBC V2.4 以降を使用している場合、取得する結果行数は、READ_TABLE_MAX_ROW パラメーターの値を超えることはできません。このパラメーターの詳細については、「プロジェクト操作」をご参照ください。データ保護機能の詳細については、「プロジェクトデータ保護」をご参照ください。

  • MaxCompute V2.0 データ型エディションでは、TINYINT、SMALLINT、DATETIME、TIMESTAMP、ARRAY、MAP、STRUCT など、より多くのデータ型がサポートされています。これらの新しいデータ型を使用するには、次のコマンドを実行して MaxCompute V2.0 データ型エディションを有効にする必要があります。詳細については、「データ型エディション」をご参照ください。

    set odps.sql.type.system.odps2=true

MaxCompute JDBC ドライバーの JAR パッケージをダウンロードする

OSSGitHub、または Maven から、さまざまなバージョンの MaxCompute JDBC ドライバーの JAR パッケージをダウンロードできます。名前が jar-with-dependencies を含む JAR パッケージをダウンロードすることをお勧めします。

次のコードは、Maven からダウンロードした MaxCompute JDBC ドライバーのプロジェクトオブジェクトモデル (POM) ファイルの依存関係を示しています。

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

MaxCompute JDBC ドライバーは、aliyun-odps-jdbc という名前のオープンソースコードプロジェクトです。

MaxCompute JDBC ドライバーの開発と改善にご参加ください。[問題] タブで問題を報告し、[プルリクエスト] タブでソースコードを最適化できます。[問題] タブと [プルリクエスト] タブでの操作は、オープンソースプロジェクトのテンプレート要件に従う必要があります。

JDBC パラメーター

JDBC ドライバーを使用するために、URL パラメーターとプロパティパラメーターを構成できます。プロパティパラメーターは、URL パラメーターよりも優先されます。

説明

URL パラメーターが odps_config=config_file の場合、config_file はプロパティパラメーターとして読み取られます。

  • 基本パラメーター

    URL キー

    プロパティキー

    必須

    説明

    project

    project_name

    はい

    MaxCompute プロジェクトの名前。

    accessId

    access_id

    はい

    Alibaba Cloud アカウントの AccessKey ID。

    AccessKey ペア ページから AccessKey ID を取得できます。

    accessKey

    access_key

    はい

    Alibaba Cloud アカウントの AccessKey シークレット。

    AccessKey ペア ページで AccessKey シークレットを取得できます。

    logview

    logview_host

    いいえ

    MaxCompute LogView の URL。http://logview.odps.aliyun.com に設定します。

    tunnelEndpoint

    tunnel_endpoint

    いいえ

    MaxCompute Tunnel のエンドポイント。

    さまざまなリージョンおよびネットワーク接続タイプに対応する Tunnel エンドポイントの詳細については、「エンドポイント」をご参照ください。

  • ログ構成パラメーター

    URL キー

    プロパティキー

    必須

    説明

    enableOdpsLogger

    enable_odps_logger

    いいえ

    MaxCompute JDBC ロガーを有効にするかどうかを指定します。有効な値:

    • False:MaxCompute JDBC ロガーは無効です。ログはファイルに記録されません。これはデフォルト値です。

    • True:MaxCompute JDBC ロガーは有効です。ログは、MaxCompute JDBC ドライバーの JAR パッケージが格納されているディレクトリの jdbc.log ファイルに記録されます。

    logConfFile

    log_conf_file

    いいえ

    Simple Logging Facade for Java (SLF4J) の構成ファイル。この構成ファイルを指定して、ログ出力を柔軟に構成できます。たとえば、出力ファイルを指定し、logLevel パラメーターを構成してログレベルを指定できます。この構成ファイルを指定するには、プロジェクトの pom.xml ファイルに次の依存関係を追加します。

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

    構成の詳細については、「」をご参照ください。

    logLevel

    log_level

    いいえ

    ログレベル。デフォルト値:INFO

  • その他のパラメーター

    URL キー

    プロパティキー

    必須

    説明

    stsToken

    sts_token

    いいえ

    Alibaba Cloud STS トークン。

    charset

    charset

    いいえ

    入力と出力の文字セット。デフォルト値:UTF-8

    useProjectTimeZone

    use_project_time_zone

    いいえ

    MaxCompute プロジェクトの odps.sql.timezone パラメーターで指定されたタイムゾーンを使用するかどうかを指定します。有効な値:

    • False:MaxCompute プロジェクトのタイムゾーンは使用されません。これはデフォルト値です。

    • True:MaxCompute プロジェクトのタイムゾーンが使用されます。

    説明

    文で set odps.sql.timezone=xxx を構成して、MaxCompute プロジェクトのタイムゾーンを使用することもできます。

    文で指定されたタイムゾーンは、プロジェクトで指定されたタイムゾーンよりも優先されます。プロジェクトで指定されたタイムゾーンは、指定していないタイムゾーンよりも優先されます。

    disableConnectinosSetting

    disable_connection_setting

    いいえ

    接続の SQL パラメーターを構成できるかどうかを指定します。有効な値:

    • False:接続の SQL パラメーターは構成できません。これはデフォルト値です。

    • True:接続の SQL パラメーターを構成できます。

    このパラメーターを True に設定すると、文で set コマンドを実行したときに、文と接続の SQL パラメーターが同時に構成されます。このパラメーターを False に設定すると、文で set xxx コマンドを実行したときに、文の SQL パラメーターのみが構成されます。

    settings

    settings

    いいえ

    デフォルトのグローバル SQL 設定。このパラメーターの値は、{"key":"value"} などの JSON 形式で渡されます。

    tableList

    table_list

    いいえ

    MaxCompute のテーブルの名前。テーブルの名前は、projectname.tablename,projectname1.tablename1 形式です。

    connectTimeout

    connect_timeout

    いいえ

    基盤となるネットワーク上で接続を確立するためのタイムアウト期間。デフォルト値:10。単位:秒。

    readTimeout

    read_timeout

    いいえ

    基盤となるネットワーク接続でデータを読み取るためのタイムアウト期間。デフォルト値:120。単位:秒。

    説明
    • 各 RESTful API リクエストの接続のタイムアウト期間は、connectTimeoutreadTimeout の値の合計です。各 RESTful API リクエストのデフォルトのタイムアウト期間は 130 秒です。デフォルトでは、RESTful API リクエストで接続を確立するための最大再試行回数は 3 です。

    • RESTful API リクエストのタイムアウト期間を調整する場合は、readTimeout パラメーターの値を変更します。

    enableCommandApi

    enable_command_api

    いいえ

    commandAPI を使用するかどうかを指定します。有効な値:

    • False:commandAPI は使用されません。これはデフォルト値です。

    • True:commandAPI が使用されます。

      このパラメーターを True に設定すると、JDBC ドライバーを使用しているときに、MaxCompute クライアント (odpscmd) でのみ実行できる特定のコマンドを実行できます。

    httpsCheck

    https_check

    いいえ

    HTTPS ベースの証明書検証を実行するかどうかを指定します。有効な値:

    • False:HTTPS ベースの証明書検証は実行されません。これはデフォルト値です。

    • True:HTTPS ベースの証明書検証が実行されます。

    tunnelConnectTimeout

    tunnel_connect_timeout

    いいえ

    Tunnel コマンドを実行してデータをダウンロードするときの、トンネル接続のタイムアウト期間。デフォルト値:180。単位:秒。

    tunnelReadTimeout

    tunnel_read_timeout

    いいえ

    Tunnel コマンドを実行してデータをダウンロードするときの、データを読み取るためのタイムアウト期間。デフォルト値:300。単位:秒。

    skipCheckIfSelect

    skipCheckIfSelect

    いいえ

    SQL 解析をスキップするかどうかを指定します。有効な値:

    • False (デフォルト): 解析をスキップしません。

    • True: 解析をスキップします。

    説明

    SQL 解析をスキップすると、クライアントの CPU 使用率とメモリ使用率がある程度削減されますが、SELECT 以外のステートメントの待機時間が長くなる可能性があります。

  • MCQA(オフラインモード)に関連しないパラメーター

    URL キー

    プロパティキー

    必須

    説明

    autoLimitFallback

    auto_limit_fallback

    いいえ

    自動制限フォールバックを有効にするかどうかを指定します。有効な値:

    • False:自動制限フォールバックは無効です。これはデフォルト値です。

    • True:自動制限フォールバックは有効です。オフラインモードでは、このパラメーターを True に設定すると、エラーメッセージ ダウンロード権限がありません が表示されたときにダウンロードできるデータレコードの最大数は 10,000 になります。

  • MaxQA/MCQA 1.0 関連パラメーター(MaxQA/MCQA 1.0 モード)

    • 基本パラメーター

    • URLキー

      プロパティキー

      必須

      説明

      interactiveMode

      interactive_mode

      いいえ

      MaxCompute Query Acceleration(MaxQA/MCQA 1.0)を有効にするかどうかを指定します。有効な値:

      • False: MCQAは無効です。これはデフォルト値です。

      • True: MCQAは有効です。

      executeProject

      execute_project_name

      いいえ

      SQL タスクが実行される MaxCompute プロジェクトの名前。

      tunnelRetryTime

      tunnel_retry_time

      いいえ

      SQLExecutor によって指定された Tunnel コマンドの最大リトライ回数。デフォルト値:6。

      attachTimeout

      attach_timeout

      いいえ

      MaxQA/MCQA 1.0 が有効になっている場合の接続確立のタイムアウト期間。デフォルト値:60。単位:秒。

      fallbackQuota

      fallback_quota

      いいえ

      MaxQA/MCQA 1.0 ジョブがロールバックされたときに選択されるクォータの名前。このパラメーターを設定しない場合は、MaxCompute プロジェクトのデフォルトのクォータが使用されます。

      quotaName

      quota_name

      いいえ

      MaxQA ジョブで使用されるクォータ計算リソース。

    • 制限関連のパラメーター

      URL キー

      プロパティキー

      必須

      説明

      instanceTunnelMaxRecord

      instance_tunnel_max_record

      いいえ

      結果セットの最大レコード数。

      説明

      enableLimit パラメーターが False に設定されている場合にのみ、このパラメーターは有効になります。

      instanceTunnelMaxSize

      instance_tunnel_max_size

      いいえ

      結果セットの最大サイズ。単位:バイト。

      autoSelectLimit

      auto_select_limit

      いいえ

      クエリにおけるデータの最大行数。

      Alibaba Cloud の Elastic Computing 環境では、デフォルトで最大 100 万行のデータをクエリできます。 100 万行を超えるデータをクエリする場合、このパラメーターを設定できます。

      説明
      • enableLimit パラメーターが False に設定されている場合にのみ、このパラメーターは有効になります。

      • V3.2.29 以降の JDBC ドライバーを使用する場合、autoSelectLimit パラメーターを設定すると、enableLimit パラメーターは自動的に False に設定されます。

      enableLimit

      enable_limit

      いいえ

      クエリにおけるデータレコードの最大数に対する制限を有効にするかどうかを指定します。有効な値:

      • False: クエリにおけるデータレコードの最大数に対する制限は無効になります。

      • True: クエリにおけるデータレコードの最大数に対する制限が有効になります。これはデフォルト値です。

        クエリにおけるデータレコードの最大数に対する制限が有効になると、ダウンロード コントロールはチェックされず、結果レコードの最大数は 10,000 になります。

    • ロールバック関連のパラメーター

      URLキー

      プロパティキー

      必須

      説明

      fallbackForUnknownError

      fallback_for_unknownerror

      いいえ

      不明なエラーが発生した場合に MCQA ジョブをオフラインモードにロールバックするかどうかを指定します。有効な値:

      • False: MCQA ジョブはオフラインモードにロールバックされません。

      • True: MCQA ジョブはオフラインモードにロールバックされます。これはデフォルト値です。

      fallbackForResourceNotEnough

      fallback_for_resourcenotenough

      いいえ

      リソースが不足している場合に MCQA ジョブをオフラインモードにロールバックするかどうかを指定します。有効な値:

      • False: MCQA ジョブはオフラインモードにロールバックされません。

      • True: MCQA ジョブはオフラインモードにロールバックされます。これはデフォルト値です。

      fallbackForUpgrading

      fallback_for_upgrading

      いいえ

      アップグレード中に MCQA ジョブをオフラインモードにロールバックするかどうかを指定します。有効な値:

      • False: MCQA ジョブはオフラインモードにロールバックされません。

      • True: MCQA ジョブはオフラインモードにロールバックされます。これはデフォルト値です。

      fallbackForRunningTimeout

      fallback_for_runningtimeout

      いいえ

      コマンドの実行時に接続がタイムアウトした場合に MCQA ジョブをオフラインモードにロールバックするかどうかを指定します。有効な値:

      • False: MCQA ジョブはオフラインモードにロールバックされません。

      • True: MCQA ジョブはオフラインモードにロールバックされます。これはデフォルト値です。

      fallbackForUnsupportedFeature

      fallbackForUnsupportedFeature

      いいえ

      MCQA がサポートされていないシナリオで MCQA ジョブをオフラインモードにロールバックするかどうかを指定します。有効な値:

      • False: MCQA ジョブはオフラインモードにロールバックされません。

      • True: MCQA ジョブはオフラインモードにロールバックされます。これはデフォルト値です。

      alwaysFallback

      always_fallback

      いいえ

      上記のすべてのシナリオで MCQA ジョブをオフラインモードにロールバックするかどうかを指定します。有効な値:

      • False: 自動制限フォールバックは無効になっています。これはデフォルト値です。

      • True: MCQA ジョブはオフラインモードにロールバックされます。

      説明

      このパラメーターは、V3.2.3 以降の MaxCompute JDBC ドライバーを使用する場合にのみ有効です。

      disableFallback

      disable_fallback

      いいえ

      上記のすべてのシナリオで MCQA ジョブをオフラインモードにロールバックしないかどうかを指定します。有効な値:

      • False: MCQA ジョブはオフラインモードにロールバックされます。これはデフォルト値です。

      • True: MCQA ジョブはオフラインモードにロールバックされません。

      fallbackQuota

      fallback_quota

      いいえ

      MCQA ジョブがロールバックされたときに選択されるクォータの名前。このパラメーターを設定しない場合は、MaxCompute プロジェクトのデフォルトのクォータが使用されます。

MaxCompute に接続する

  1. MaxCompute JDBC ドライバーを読み込みます。

    Class.forName("com.aliyun.odps.jdbc.OdpsDriver");
  2. DriverManager を使用して MaxCompute への接続を確立します。

    Connection cnct = DriverManager.getConnection(url, accessId, accessKey);
    • url:URL は jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project_name>[&useProjectTimeZone={true|false}] 形式です。パラメーター:

      • <maxcompute_endpoint>:特定のリージョンにおける MaxCompute サービスのエンドポイント。たとえば、中国 (杭州) リージョンにおける MaxCompute のパブリックエンドポイントは http://service.cn-hangzhou.maxcompute.aliyun.com/api です。エンドポイントの構成情報の詳細については、「エンドポイント」をご参照ください。

      • <maxcompute_project_name>:MaxCompute プロジェクトの名前。

      • useProjectTimeZone:MaxCompute プロジェクトのタイムゾーンを使用するかどうかを指定します。

      コマンドの例:

      jdbc:odps:http://service.cn-hangzhou.maxcompute.aliyun.com/api?project=test_project&useProjectTimeZone=true;
    • accessId:プロジェクトの作成に使用されたアカウントの AccessKey ID。

    • accessKey:プロジェクトの作成に使用されたアカウントの AccessKey ID に対応する AccessKey シークレット。

      説明

      AccessKey ID と AccessKey シークレットの作成および表示方法の詳細については、「Alibaba Cloud アカウントを作成する」をご参照ください。

  3. データクエリを実行します。

    try (
        Statement stmt = cnct.createStatement();
        ResultSet rset = stmt.executeQuery("SELECT foo FROM bar;")
    ) {
        while (rset.next()) {
          // 結果を処理する
        }
    } catch (SQLException e) {
      // 例外を処理する
    } finally {
        if (cnct != null) {
            try {
                cnct.close();
            } catch (SQLException e) {
                // 閉じられた例外を無視または記録する
            }
        }
    }

サンプルコード

  • テーブルの削除、テーブルの作成、メタデータの取得

    説明

    プロジェクトで JDBC の依存関係が使用されている場合、SDK の依存関係を指定する必要はありません。JDBC の依存関係を構成すると、関連する SDK が自動的に使用されます。SDK の依存関係を指定すると、コードの実行時にバージョンの不一致によりエラーが発生する可能性があります。

    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";
     		// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。RAM ユーザーを使用して API 操作を呼び出すか、日常的な O&M を実行することをお勧めします。RAM ユーザーを作成するには、RAM コンソールにログインします。
    		// この例では、AccessKey ID と AccessKey シークレットは環境変数に保存されています。ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
    		// AccessKey ペアの漏洩を防ぐため、コードに AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
    		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()
            ) {
                // テーブルを作成する
                final String tableName = "jdbc_test";
                stmt.execute("DROP TABLE IF EXISTS " + tableName);
                stmt.execute("CREATE TABLE " + tableName + " (key BIGINT, value STRING)");
    
                // メタデータを取得する
                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();
            }
        }
    }

    次の結果が返されます。

    product = MaxCompute/ODPS
    jdbc version = 3, 8
    inspecting table: jdbc_test
    key    BIGINT(-5)
    value    STRING(12)
  • テーブルの更新

    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";
    		// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。これらの認証情報を使用して操作を実行すると、セキュリティリスクが発生する可能性があります。RAM ユーザーを使用して API 操作を呼び出すか、日常的な O&M を実行することをお勧めします。RAMユーザーを作成するには、RAM コンソールにログインします。
    		// この例では、AccessKey ID と AccessKey シークレットは環境変数に保存されています。ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
    		// AccessKey ペアの漏洩を防ぐため、コードに AccessKey ID と AccessKey シークレットを直接指定しないことをお勧めします。
      	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()
            ) {
                // 次の DML も機能します
                // 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();
            }
        }
    }
  • 複数のテーブルを同時に更新する

    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";
      	// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 RAM ユーザーを使用して API 操作を呼び出すか、日常的な O&M を実行することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
    		// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
    		// AccessKey ID と AccessKey シークレットをコードにハードコーディングしないことをお勧めします。そうしないと、AccessKey ペアが漏洩する可能性があります。
    		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(?, ?)")
            ) {
                // 最初のバッチ
                pstmt.setLong(1, 1L);
                pstmt.setString(2, "foo");
                pstmt.addBatch();
    
                // 2 番目のバッチ
                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();
            }
        }
    }
    説明
    • executeBatch メソッドは、クラスタ化されたテーブルへのバッチデータ書き込みには適していません。たとえば、このメソッドを使用して、一度に Transaction Table 2.0 テーブルにバッチデータを書き込むことはできません。

    • 一度に標準のパーティションテーブルにバッチデータを書き込む場合は、INSERT INTO ステートメントでデータを書き込むパーティションを指定する必要があります。次のコードは例を示しています。

      -- パーティションテーブル 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);
      
      -- パーティションテーブルに sale_date='20240219' と region='hangzhou' のパーティションが含まれている場合は、次の INSERT INTO ステートメントを実行して、一度にパーティションテーブルにバッチデータを書き込みます。
      INSERT INTO sale_detail PARTITION(sale_date='20240219', region='hangzhou') VALUES(?, ?, ?)
  • テーブルからデータをクエリする

    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";
      	// Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。 AccessKey ペアを使用して API 操作を呼び出すと、リスクが発生する可能性があります。 RAM ユーザーを使用して API 操作を呼び出すか、日常的な O&M を実行することをお勧めします。 RAM ユーザーを作成するには、RAM コンソールにログインします。
    		// この例では、AccessKey ID と AccessKey シークレットは環境変数として構成されています。ビジネス要件に基づいて、構成ファイルに AccessKey ペアを保存することもできます。
    		// AccessKey ID と AccessKey シークレットをコードにハードコーディングしないことをお勧めします。そうしないと、AccessKey ペアが漏洩する可能性があります。
    		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();
            }
        }
    }
    説明

    OdpsStatement は、execute(sql)executeQuery(sql)executeUpdate(sql) の各メソッドをサポートしています。execute(sql) メソッドと executeQuery(sql) メソッドは、desc tableshow tablesshow partitions などの一般的なコマンドをサポートしています。