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

MaxCompute:使用上の注意

最終更新日:Dec 06, 2024

このトピックでは、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を使用している場合、result setsは取得できません。 MaxCompute JDBC V2.4以降を使用する場合、取得する結果行の数はREAD_TABLE_MAX_ROWパラメーターの値を超えることはできません。 このパラメーターの詳細については、「プロジェクト操作」をご参照ください。 データ保護機能の詳細については、「プロジェクトデータ保護」をご参照ください。

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

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

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

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

次のコードでは、MavenからダウンロードしたMaxCompute JDBCドライバーのProject Object Model (POM) ファイルの依存関係について説明します。

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

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

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

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 secretを取得できます。

    logview

    logview_host

    選択可能

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

    tunneelEndpoint

    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_ファイル

    選択可能

    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プロジェクトのタイムゾーンが使用されています。

    説明

    MaxComputeプロジェクトのタイムゾーンを使用するように、ステートメントでset odps.sql.timezone=xxxを設定することもできます。

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

    disableConnectinosSetting

    disable_connection_設定

    選択可能

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

    • False: 接続のSQLパラメーターを設定できません。 デフォルト値です。

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

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

    設定

    設定

    選択可能

    デフォルトのグローバル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 です。 単位は秒です。

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

    URLキー

    プロパティキー

    必須

    説明

    autoLimitFallback

    auto_limit_フォールバック

    選択可能

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

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

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

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

    • 基本パラメーター

    • URLキー

      プロパティキー

      必須

      説明

      interactiveMode

      interactive_mode

      選択可能

      MaxComputeクエリアクセラレーション (MCQA) を有効にするかどうかを指定します。 有効な値:

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

      • True: MCQAが有効です。

      executeProject

      execute_project_name

      選択可能

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

      tunnelRetryTime

      tunnel_retry_time

      選択可能

      SQLExecutorで指定したTunnelコマンドの最大リトライ回数。 デフォルト値: 6。

      attachTimeout

      attach_timeout

      選択可能

      MCQAが有効になっているときに接続を確立するためのタイムアウト期間。 デフォルト値: 60。 単位は秒です。

      fallbackQuota

      fallback_quota

      選択可能

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

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

      URLキー

      プロパティキー

      必須

      説明

      instanceTunnelMaxRecord

      instance_tunnel_max_レコード

      選択可能

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

      説明

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

      instanceTunnelMaxSize

      instance_tunnel_max_size

      選択可能

      結果セットの最大サイズ。 単位はバイトです。

      autoSelectLimit

      auto_select_limit

      選択可能

      クエリ内のデータの最大行数。

      Alibaba Cloudのエラスティックコンピューティング環境では、デフォルトで最大100万行のデータを照会できます。 100万行を超えるデータをクエリする場合は、このパラメーターを設定できます。

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

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

      • odps.sql.select.auto.limitをMaxComputeのSQL設定に追加できます。 既定では、このパラメーターはSQLジョブの実行時に有効になります。

      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. データクエリを実行します。

    Statement stmt = cnct.createStatement();
    ResultSet rset = stmt.executeQuery("SELECT foo FROM bar");
    
    while (rset.next()) {
        // process the results
    }
    
    rset.close();
    stmt.close();
    cnct.close();

サンプルコード

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

    説明

    プロジェクトで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";
     		// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. If you use an AccessKey pair to call API operations, risks may occur. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console.
    		// In this example, the AccessKey ID and AccessKey secret are saved in the environment variables. You can also save your AccessKey pair in the configuration file based on your business requirements.
    		// To prevent AccessKey pair leaks, we recommend that you do not directly specify the AccessKey ID and AccessKey secret in the 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) throws SQLException {
            try {
                Class.forName(DRIVER_NAME);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                System.exit(1);
            }
    				
            Connection conn = DriverManager.getConnection(
                "jdbc:odps:<maxcompute_endpoint>?project=<maxcompute_project>",
                Main.accessId, Main.accessKey);
    
            // create a table
            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)");
    
            // get meta data
            DatabaseMetaData metaData = conn.getMetaData();
            System.out.println("product = " + metaData.getDatabaseProductName());
            System.out.println("jdbc version = "
                + metaData.getDriverMajorVersion() + ", "
                + metaData.getDriverMinorVersion());
            ResultSet tables = metaData.getTables(null, null, tableName, null);
            while (tables.next()) {
                String name = tables.getString("TABLE_NAME");
                System.out.println("inspecting table: " + name);
                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") + ")");
                }
                columns.close();
            }
    
            tables.close();
            stmt.close();
            conn.close();
        }
    }

    次の応答が返されます。

    product = MaxCompute/ODPS
    jdbc version = 3, 0
    inspecting table: jdbc_test
    key    BIGINT(-5)
    value    STRING(12)
  • テーブルを更新するUpdate a table

    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";
    		// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. If you use these credentials to perform operations, security risks may arise. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console.
    		// In this example, the AccessKey ID and AccessKey secret are saved in the environment variables. You can also save your AccessKey pair in the configuration file based on your business requirements.
    		// To prevent AccessKey pair leaks, we recommend that you do not directly specify the AccessKey ID and AccessKey secret in the 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) throws SQLException {
            try {
                Class.forName(DRIVER_NAME);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                System.exit(1);
            }
    				
            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;
    
            stmt.close();
            conn.close();
        }
    }
  • 複数のテーブルを同時に更新する

    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";
      	// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. If you use an AccessKey pair to call API operations, risks may occur. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console.
    		// In this example, the AccessKey ID and AccessKey secret are configured as environment variables. You can also save your AccessKey pair in the configuration file based on your business requirements.
    		// We recommend that you do not hard-code the AccessKey ID and AccessKey secret in your code. Otherwise, the AccessKey pair may be leaked.
    		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) throws SQLException {
            try {
                Class.forName(DRIVER_NAME);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                System.exit(1);
            }
    				
            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();
    
            pstmt.setLong(1, 2L);
            pstmt.setString(2, "bar");
            pstmt.addBatch();
    
            int[] ret = pstmt.executeBatch();
    
            assert ret[0] == 1;
            assert ret[1] == 1;
    
            pstmt.close();
            conn.close();
        }
    }
    説明
    • executeBatchメソッドは、クラスタ化されたテーブルへのバッチデータの書き込みには適していません。 たとえば、このメソッドを使用して、一度にトランザクションテーブル2.0テーブルにデータのバッチを書き込むことはできません。

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

      -- Execute the following statement to create the partitioned table 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);
      
      -- If the partitioned table contains partitions sale_date='20240219' and region='hangzhou', execute the following INSERT INTO statement to write a batch of data to the partitioned table at a time: 
      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";
      	// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. If you use an AccessKey pair to call API operations, risks may occur. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console.
    		// In this example, the AccessKey ID and AccessKey secret are configured as environment variables. You can also save your AccessKey pair in the configuration file based on your business requirements.
    		// We recommend that you do not hard-code the AccessKey ID and AccessKey secret in your code. Otherwise, the AccessKey pair may be leaked.
    		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) throws SQLException {
            try {
                Class.forName(DRIVER_NAME);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
                System.exit(1);
            }
    				
            Connection conn = DriverManager.getConnection(
                "jdbc:odps:<maxcompute endpoint>?project=<maxcompute project>",
                Main.accessId, Main.accessKey);
            ResultSet rs;
    
            Statement stmt = conn.createStatement();
            String sql = "SELECT * FROM JDBC_TEST";
            stmt.executeQuery(sql);
    
            ResultSet rset = stmt.getResultSet();
            while (rset.next()) {
                System.out.println(String.valueOf(rset.getInt(1)) + "\t" + rset.getString(2));
            }
        }
    }
    説明

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