このトピックでは、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 パッケージをダウンロードする
OSS、GitHub、または 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 リクエストの接続のタイムアウト期間は、connectTimeout と readTimeout の値の合計です。各 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 モード)
基本パラメーター
False: MCQAは無効です。これはデフォルト値です。
True: MCQAは有効です。
制限関連のパラメーター
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 プロジェクトのデフォルトのクォータが使用されます。
URLキー
プロパティキー
必須
説明
interactiveMode
interactive_mode
いいえ
MaxCompute Query Acceleration(MaxQA/MCQA 1.0)を有効にするかどうかを指定します。有効な値:
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 ジョブで使用されるクォータ計算リソース。
MaxCompute に接続する
MaxCompute JDBC ドライバーを読み込みます。
Class.forName("com.aliyun.odps.jdbc.OdpsDriver");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 アカウントを作成する」をご参照ください。
データクエリを実行します。
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 table、show tables、show partitionsなどの一般的なコマンドをサポートしています。