Java 用 Azure Cosmos DB for Apache Cassandra クライアント ライブラリを使用して、非構造化データの格納、管理、クエリを実行します。 このガイドの手順に従って、新しいアカウントの作成、Java クライアント ライブラリのインストール、アカウントへの接続、一般的な操作の実行、最終的なサンプル データのクエリを実行します。
API リファレンス ドキュメント | ライブラリのソース コード | パッケージ (Maven)
[前提条件]
Azure サブスクリプション
- Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。
Azure Cloud Shell の Azure CLI の最新バージョン。
- CLI 参照コマンドをローカルで実行する場合は、
az login
コマンドを使用して Azure CLI にサインインします。
- CLI 参照コマンドをローカルで実行する場合は、
- Java 21 以降
セットアップ中
まず、このガイドのアカウントと開発環境を設定します。 このセクションでは、アカウントの作成、資格情報の取得、開発環境の準備のプロセスについて説明します。
アカウントを作成する
まず、Apache Cassandra アカウント用の API を作成します。 アカウントが作成されたら、キースペースとテーブル リソースを作成します。
ターゲット リソース グループがまだない場合は、
az group create
コマンドを使用して、サブスクリプションに新しいリソース グループを作成します。az group create \ --name "<resource-group-name>" \ --location "<location>"
az cosmosdb create
コマンドを使用して、既定の設定で新しい Azure Cosmos DB for Apache Cassandra アカウントを作成します。az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --locations "regionName=<location>" \ --capabilities "EnableCassandra"
cosmicworks
という名前のaz cosmosdb cassandra keyspace create
を使用して、新しいキースペースを作成します。az cosmosdb cassandra keyspace create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --name "cosmicworks"
複数行の Bash コマンドを使用して、スキーマを表す新しい JSON オブジェクトを作成します。 次に、
az cosmosdb cassandra table create
コマンドを使用して、products
という名前の新しいテーブルを作成します。schemaJson=$(cat <<EOF { "columns": [ { "name": "id", "type": "text" }, { "name": "name", "type": "text" }, { "name": "category", "type": "text" }, { "name": "quantity", "type": "int" }, { "name": "price", "type": "decimal" }, { "name": "clearance", "type": "boolean" } ], "partitionKeys": [ { "name": "id" } ] } EOF )
az cosmosdb cassandra table create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --keyspace-name "cosmicworks" \ --name "product" \ --schema "$schemaJson"
資格情報の取得
ここで、最近作成したアカウントへの接続を作成するために使用するクライアント ライブラリのパスワードを取得します。
az cosmosdb show
を使用して、アカウントの連絡先ポイントとユーザー名を取得します。az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"
前のコマンドの出力の
contactPoint
プロパティとusername
プロパティの値を記録します。 これらのプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する 連絡先ポイント と ユーザー名 です。az cosmosdb keys list
を使用して、アカウントのキーを取得します。az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"
前のコマンドの出力の
primaryMasterKey
プロパティの値を記録します。 このプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する パスワード です。
開発環境の準備
次に、新しいプロジェクトとクライアント ライブラリを使用して開発環境を構成します。 この手順は、このガイドの残りの部分に進む前に必要な最後の前提条件です。
空のディレクトリから開始します。
Maven を使用して新しい Java コンソール プロジェクトを生成します。
mvn archetype:generate -DgroupId=quickstart -DartifactId=console -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Maven から
java-driver-core
パッケージをインポートします。 このセクションをpom.xmlファイル に 追加します。<dependency> <groupId>org.apache.cassandra</groupId> <artifactId>java-driver-core</artifactId> <version>[4.,)</version> </dependency>
/console/src/main/java/quickstart/App.java ファイルを開きます。
既存の Java アプリケーションの定型句を確認します。
package quickstart; /** * Hello world! * */ public class App { public static void main( String[] args ) { System.out.println( "Hello World!" ); } }
定型文からコメントとコンソール出力を削除します。 このコード ブロックは、このガイドの残りの部分の開始点です。
package quickstart; public class App { public static void main(String[] args) { } }
java.security.NoSuchAlgorithmException
名前空間をインポートします。import java.security.NoSuchAlgorithmException;
main
メソッド シグネチャを更新して、NoSuchAlgorithmException
例外がスローされる可能性があることを示します。public static void main(String[] args) throws NoSuchAlgorithmException { }
Von Bedeutung
このガイドの残りの手順では、
main
メソッド内にコードを追加することを前提としています。プロジェクトをビルドします。
mvn compile
オブジェクト モデル
説明 | |
---|---|
CqlSession |
クラスターへの特定の接続を表します |
PreparedStatement |
複数回効率的に実行できるプリコンパイル済み CQL ステートメントを表します。 |
BoundStatement |
バインドされたパラメーターを持つ準備済みステートメントを表します。 |
Row |
クエリ結果の 1 行を表します |
コード例
クライアントの認証
まず、このガイドで前に収集した資格情報を使用してクライアントを認証します。
統合開発環境 (IDE) で /console/src/main/java/quickstart/App.java ファイルを開きます。
次の種類をインポートします。
java.net.InetSocketAddress
javax.net.ssl.SSLContext
com.datastax.oss.driver.api.core.CqlIdentifier
com.datastax.oss.driver.api.core.CqlSession
com.datastax.oss.driver.api.core.cql.BoundStatement
com.datastax.oss.driver.api.core.cql.PreparedStatement
com.datastax.oss.driver.api.core.cql.ResultSet
com.datastax.oss.driver.api.core.cql.Row
import java.net.InetSocketAddress; import javax.net.ssl.SSLContext; import com.datastax.oss.driver.api.core.CqlIdentifier; import com.datastax.oss.driver.api.core.CqlSession; import com.datastax.oss.driver.api.core.cql.BoundStatement; import com.datastax.oss.driver.api.core.cql.PreparedStatement; import com.datastax.oss.driver.api.core.cql.ResultSet; import com.datastax.oss.driver.api.core.cql.Row;
このガイドで前に収集した資格情報の文字列変数を作成します。 変数に
username
、password
、およびcontactPoint
という名前を付けます。 また、ローカル データ センターのregion
という名前の文字列変数を作成します。String username = "<username>"; String password = "<password>"; String contactPoint = "<contact-point>";
Azure Cosmos DB for Apache Cassandra アカウントを作成したリージョンに別の文字列変数を作成します。 この変数に
region
名前を付けます。String region = "<region>";
トランスポート層セキュリティ (TLS) プロトコルを使用していることを確認するために、
SSLContext
オブジェクトを作成します。SSLContext sslContext = SSLContext.getDefault();
前の手順で作成した資格情報と構成変数を使用して、新しい
CqlSession
オブジェクトを作成します。 連絡先ポイント、ローカル データ センター、認証資格情報、キースペース、トランスポート層セキュリティ (TLS) コンテキストを設定します。CqlSession session = CqlSession.builder() .addContactPoint(new InetSocketAddress(contactPoint, 10350)) .withLocalDatacenter(region) .withAuthCredentials(username, password) .withKeyspace(CqlIdentifier.fromCql("cosmicworks")) .withSslContext(sslContext) .build();
Warnung
このガイドでは、認証を簡略化するために、トランスポート層セキュリティ (TLS) の完全な検証が無効になっています。 運用環境のデプロイでは、検証を完全に有効にします。
データをアップサートする
次に、新しいデータをテーブルにアップサートします。 アップサートにより、同じデータがテーブルに既に存在するかどうかに応じて、データが適切に作成または置換されます。
このガイドで前に作成したテーブルに対応するフィールドを使用して、
Product
という名前の新しいクラスを定義します。class Product { public String id; public String name; public String category; public int quantity; public boolean clearance; public Product(String id, String name, String category, int quantity, boolean clearance) { this.id = id; this.name = name; this.category = category; this.quantity = quantity; this.clearance = clearance; } @Override public String toString() { return String.format("Product{id='%s', name='%s', category='%s', quantity=%d, clearance=%b}", id, name, category, quantity, clearance); } }
ヒント
Java では、この型を別のファイルに作成することも、既存のファイルの末尾に作成することもできます。
Product
型の新しいオブジェクトを作成します。 オブジェクトをproduct
という名前の変数に格納します。Product product = new Product( "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "Yamba Surfboard", "gear-surf-surfboards", 12, false );
新しい行を挿入するための Cassandra クエリ言語 (CQL) クエリを使用して、
insertQuery
という名前の新しい文字列変数を作成します。String insertQuery = "INSERT INTO product (id, name, category, quantity, clearance) VALUES (?, ?, ?, ?, ?)";
insert ステートメントを準備し、製品プロパティをパラメーターとしてバインドします。
PreparedStatement insertStmt = session.prepare(insertQuery); BoundStatement boundInsert = insertStmt.bind( product.id, product.name, product.category, product.quantity, product.clearance );
バインドされたステートメントを実行して製品をアップサートします。
session.execute(boundInsert);
データの読み取り
次に、テーブルにアップサートされたデータを読み取る。
同じ
id
フィールドを持つ項目と一致する CQL クエリを使用して、readQuery
という名前の新しい文字列変数を作成します。String readQuery = "SELECT * FROM product WHERE id = ? LIMIT 1";
このガイドで前に作成した製品と同じ値を使用して、
id
という名前の文字列変数を作成します。String id = "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb";
ステートメントを準備し、製品の
id
フィールドをパラメーターとしてバインドします。PreparedStatement readStmt = session.prepare(readQuery); BoundStatement boundRead = readStmt.bind(id);
バインドされたステートメントを実行し、結果を
readResult
という名前の変数に格納します。ResultSet readResult = session.execute(boundRead);
結果セットから最初の行を取得し、見つかった場合は
Product
オブジェクトにマップします。Row row = readResult.one(); Product matchedProduct = new Product( row.getString("id"), row.getString("name"), row.getString("category"), row.getInt("quantity"), row.getBoolean("clearance") );
データのクエリを実行する
次に、クエリを使用して、テーブル内の特定のフィルターに一致するすべてのデータを検索します。
同じ
category
フィールドを持つ項目と一致する CQL クエリを使用して、findQuery
という名前の新しい文字列変数を作成します。String findQuery = "SELECT * FROM product WHERE category = ? ALLOW FILTERING";
このガイドで前に作成した製品と同じ値を使用して、
id
という名前の文字列変数を作成します。String category = "gear-surf-surfboards";
ステートメントを準備し、製品カテゴリをパラメーターとしてバインドします。
PreparedStatement findStmt = session.prepare(findQuery); BoundStatement boundFind = findStmt.bind(category);
バインドされたステートメントを実行し、結果を
findResults
という名前の変数に格納します。ResultSet results = session.execute(boundFind);
クエリ結果を反復処理し、各行を
Product
オブジェクトにマップします。for (Row result : results) { Product queriedProduct = new Product( result.getString("id"), result.getString("name"), result.getString("category"), result.getInt("quantity"), result.getBoolean("clearance") ); // Do something here with each result }
セッションを閉じる
Java では、クエリと操作が完了したら、セッションを閉じる必要があります。
session.close();
コードを実行する
アプリケーション ディレクトリのターミナルを使用して、新しく作成したアプリケーションを実行します。
mvn compile
mvn exec:java -Dexec.mainClass="quickstart.App"
ヒント
このガイドで作成した /console パス内でこのコマンドを実行していることを確認します。
リソースをクリーンアップする
ここで、最近作成したアカウントへの接続を作成するために使用するクライアント ライブラリのパスワードを取得します。
az cosmosdb show
を使用して、アカウントの連絡先ポイントとユーザー名を取得します。az cosmosdb show \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --query "{username:name,contactPoint:documentEndpoint}"
前のコマンドの出力の
contactPoint
プロパティとusername
プロパティの値を記録します。 これらのプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する 連絡先ポイント と ユーザー名 です。az cosmosdb keys list
を使用して、アカウントのキーを取得します。az cosmosdb keys list \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --type "keys"
前のコマンドの出力の
primaryMasterKey
プロパティの値を記録します。 このプロパティの値は、このガイドの後半でライブラリを使用してアカウントに接続するために使用する パスワード です。